您的位置:首页 > 其它

ZOJ3829-贪心|模拟-Known Notation

2017-07-12 11:35 369 查看
给定一个字符串,问你最少需要多少操作能让这个字符串变成后缀表达式。

当时是。。一点思路都没有。

看的题解,发现最好的办法就是

当数字不够时,把数字放到最前面,然后如果需要的话,再转。

这样次数最少。。

1 首先要发现合理的条件符号数比数字少一个。

当相等的时候就不正常了。

2 然后先判断是否需要添加数字。

如果需要的话就先行添加到最前面,然后再判断。

或者,模拟这个过程。模拟这个转变的过程,那个更加清晰一点

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
/*后缀表达式 有这样一个性质,
就是值之间的差别不要大于1,否则就不能成立
*/
const int maxn=1040;
int t;
char a[maxn];
int main()
{ scanf("%d",&t);
while(t--){
int sum1=0;
int sum2=0;
scanf("%s",a);
int len=strlen(a);
for(int i=0;i<len;i++){
if(a[i]=='*') sum1++;
else sum2++;
}
int ans;
if(sum1>sum2)
ans=sum1-sum2+1;//couqi
else
ans=0;
// cout<<ans<<endl;
sum1=0;sum2=ans;
for(int i=0;i<len;i++){
if(a[i]=='*') sum1++;
else sum2++;
if(sum1+1>sum2)
{ ans++;
sum1--;
sum2++;
}
}
printf("%d\n",ans);

}

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