您的位置:首页 > 其它

ZOJ 3829 2014牡丹江K 贪心

2014-10-14 12:59 302 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5383

1.全是数字的话合法

2.最后一个字符在不满足1的时候必须是*

3.如果数字的个数num-1<op(*个数)的话,一定是在最前方增加op-(num-1)个数字

4.从左向右扫描,记录仍可使用的数字个数cnt,碰到数字cnt++,碰到*判断cnt数目是否小于2,如果小于2的话,最好的操作肯定是把他交换到最右侧的数字。

#include<stdio.h>
#include<string.h>
char str[11111];
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",&str);
int len=strlen(str);
int a=0,b=0;
for(int i=0;i<len;i++){
if(str[i]=='*')a++;
else b++;
}
int ans=0,cnt=0;
if(b-1<a){
ans+=a-(b-1);
cnt+=a-(b-1);
}
if(str[len-1]!='*'){
for(int i=0;i<len;i++){
if(str[i]=='*'){
str[len-1]='*',str[i]='1',ans++;
break;
}
}
}
for(int i=0;i<len;i++){
if(str[i]=='*'){
if(cnt<2){
for(int j=len-1;j>i;j--){
if(str[j]!='*'){
str[j]='*',str[i]='1',ans++,cnt++;
break;
}
}
}else cnt=cnt-1;
}else cnt++;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: