ZOJ 3829 Known Notation
2015-10-02 16:34
302 查看
题目:
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829题意:
14年牡丹江的水题,现在定义算术操作为AB*,eg:12 3 + 为12+3,23* 为2*3,12*1+234*+ 可能是((1*2)+1)+(2*34);给出一段字符串,要求该字符串变换为合理的这种计算形式的最少步骤,变换可以使增加一个数字或者符号,或者交换任意两个字符。
思路:
这题水在 前面的数字可以任意组合,所以只要保证每个符号前面有足够的数字就行了,只要满足当前符号前面的数字数-前面的符号数>1,那么这个符号一定成立,所以在不满足的情况下尽可能的把附后移到后面就行了,所以只要先扫一遍判断总的数字是否足够,不够就在最前面加上,然后扫一遍把不满足的符号与最后一个数字交换即可。代码:
#define N 11234 int n,m,sum; int a ; char s ; int main() { int i,j,k,kk,t,x,y; scanf("%d",&k); while(k--) { scanf("%s",s+1); n=strlen(s+1); memset(a,0,sizeof(a)); m=0; for(i=1;i<=n;i++) if(s[i]=='*') m++; sum=0; if(n-m-m-1<0)sum=m+m+1-n; a[0]=sum; for(i=1,j=n;i<=n;i++) { while(j>0&&s[j]=='*')j--; if(j==0)break; if(s[i]=='*') { a[i]=a[i-1]; if(a[i]<2) { s[i]^=s[j];s[j]^=s[i];s[i]^=s[j]; sum++; a[i]++; } else a[i]--; } else a[i]=a[i-1]+1; } printf("%d\n",sum); } return 0; }
相关文章推荐
- POJ3469 Dual Core CPU(最小割)
- 什么是盘口?
- 异步等待(ManualResetEvent
- 新人报道 第一篇
- Model 层数据在哪初始化? View层数据又在哪初始化?
- 函数冗余参数
- UVA - 1583 Digit Generator
- poj 1952 最长递减子序列+求个数
- Jquery中Ajax的几种用法
- [C/C++]重读《The C Programming Language》
- Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)
- 男同胞爱小秘籍--作为爱他的女朋友了几天C规划
- imac下修改用户信息
- 黑马程序员-----Foundation框架学习之NSMutableString
- Compare Version Numbers
- 求某个数到另一个数之间的素数个数
- poj1417
- poj1417
- HashSet的实现原理分析
- sublime text 3创建新文件插件-AdvanceNewFile