您的位置:首页 > 其它

codeforces round #236 div.2 B

2014-05-11 16:05 260 查看
题目链接:http://codeforces.com/contest/402/problem/B

暴力求解,第一次做没有考虑到剪切后树的高度不能为零和负值,WA了,改掉后就OK了
///2014.3.16 - 2014.3.18
///codeforces round #236 div.2
///B

#include <cstdio>
#include <iostream>
using namespace std;

int n;
int k;
int tree[1050];

int numOfNotCutTree;
int numNotCut;

bool init(){
scanf("%d%d",&n,&k);
for(int i=0 ; i<n ; i++){
scanf("%d",&tree[i+1]);
}
}

bool find(int &numOfNotCutTree,int &numNotCut){
numOfNotCutTree = 1;
numNotCut = 1110;
for(int i=1 ; i<=n ; i++){
int num = 0;
bool flag = false;
for(int j=1 ; j<=n ; j++){
if( tree[j]-tree[i] != (j-i)*k ){
num++;
}
if( tree[i]+(j-i)*k<=0 ){   ///修剪后树的高度不能为负
flag = true;
break;
}
}
if(flag) continue;
if( num<numNotCut ){
numOfNotCutTree = i;
numNotCut = num;
}
}
return true;
}

bool out(int numOfNotCutTree,int numNotCut){
printf("%d\n",numNotCut );
for(int i=1 ; i<=n ; i++){
if( tree[i]-tree[numOfNotCutTree] != (i-numOfNotCutTree)*k ){
int l = -tree[i]+(tree[numOfNotCutTree]+(i-numOfNotCutTree)*k);
if( l<0 ){
printf("- %d %d\n",i,-l );
}
else{
printf("+ %d %d\n",i,l );
}
}
}
}

int main()
{
// freopen("in","r",stdin);
// freopen("out","w",stdout);
init();

find(numOfNotCutTree,numNotCut);
out(numOfNotCutTree,numNotCut);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: