codeforces round #236 div.2 B

题目链接:http://codeforces.com/contest/402/problem/B

暴力求解,第一次做没有考虑到剪切后树的高度不能为零和负值,WA了,改掉后就OK了

 1 ///2014.3.16 - 2014.3.18
 2 ///codeforces round #236 div.2
 3 ///B
 4 
 5 #include <cstdio>
 6 #include <iostream>
 7 using namespace std;
 8 
 9 int n;
10 int k;
11 int tree[1050];
12 
13 int numOfNotCutTree;
14 int numNotCut;
15 
16 bool init(){
17     scanf("%d%d",&n,&k);
18     for(int i=0 ; i<n ; i++){
19         scanf("%d",&tree[i+1]);
20     }
21 }
22 
23 bool find(int &numOfNotCutTree,int &numNotCut){
24     numOfNotCutTree = 1;
25     numNotCut = 1110;
26     for(int i=1 ; i<=n ; i++){
27         int num = 0;
28         bool flag = false;
29         for(int j=1 ; j<=n ; j++){
30             if( tree[j]-tree[i] != (j-i)*k ){
31                 num++;
32             }
33             if( tree[i]+(j-i)*k<=0 ){   ///修剪后树的高度不能为负
34                 flag = true;
35                 break;
36             }
37         }
38         if(flag) continue;
39         if( num<numNotCut ){
40             numOfNotCutTree = i;
41             numNotCut = num;
42         }
43     }
44     return true;
45 }
46 
47 bool out(int numOfNotCutTree,int numNotCut){
48     printf("%d\n",numNotCut );
49     for(int i=1 ; i<=n ; i++){
50         if( tree[i]-tree[numOfNotCutTree] != (i-numOfNotCutTree)*k ){
51             int l = -tree[i]+(tree[numOfNotCutTree]+(i-numOfNotCutTree)*k);
52             if( l<0 ){
53                 printf("- %d %d\n",i,-l );
54             }
55             else{
56                 printf("+ %d %d\n",i,l );
57             }
58         }
59     }
60 }
61 
62 int main()
63 {
64     // freopen("in","r",stdin);
65     // freopen("out","w",stdout);
66     init();
67 
68     find(numOfNotCutTree,numNotCut);
69     out(numOfNotCutTree,numNotCut);
70     return 0;
71 }

 

posted @ 2014-03-20 21:21  basement_boy  阅读(141)  评论(0编辑  收藏  举报