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 }