Codeforces Round #306 (Div. 2) -- E. Brackets in Implications
2015-06-07 11:53
477 查看
题目大意:
运算法则如下:
可以添加()改变最终的结果,例如:
.
现在给出n个数字,问有没有方法使得最终的结果为0,没有输出NO,否则输出YES,并输出表达式;
思路分析:
①:当只有一个数字的时候,1为NO,0为YES;
②:当最后一个数字为1,为NO;
③:最后两个数字为0,前面全部为1的情况下为NO;
④:最后两个数字为0,前面不全部为1的情况,输出YES,在第一个为0的数字后加“(”,倒数第二个数字后加“)”,保证最后一个数字为0,前面表达式结果为1,例如:1 0 1 1 1 0 0 输出为:1->0->(1->1->1->0)->0 ;
⑤:最后两个数字为1 0,为YES,不加括号,直接输出;
代码实现:
运算法则如下:
可以添加()改变最终的结果,例如:
.
现在给出n个数字,问有没有方法使得最终的结果为0,没有输出NO,否则输出YES,并输出表达式;
思路分析:
①:当只有一个数字的时候,1为NO,0为YES;
②:当最后一个数字为1,为NO;
③:最后两个数字为0,前面全部为1的情况下为NO;
④:最后两个数字为0,前面不全部为1的情况,输出YES,在第一个为0的数字后加“(”,倒数第二个数字后加“)”,保证最后一个数字为0,前面表达式结果为1,例如:1 0 1 1 1 0 0 输出为:1->0->(1->1->1->0)->0 ;
⑤:最后两个数字为1 0,为YES,不加括号,直接输出;
代码实现:
#include<cstdio> #include<cstring> using namespace std; const int N=100005; int num ; int main(){ int n; while(~scanf("%d",&n)){ for(int i=0;i<n;++i) scanf("%d",&num[i]); if(n==1){ if(num[0]==1) printf("NO\n"); else if(num[0]==0) printf("YES\n0\n"); continue; } int sum=0; for(int i=0;i<n-2;++i) sum+=num[i]; if(num[n-1]==1||(sum==n-2&&num[n-1]==0&&num[n-2]==0)){ printf("NO\n"); continue; } if(num[n-2]==1&&num[n-1]==0){ printf("YES\n"); printf("%d",num[0]); for(int i=1;i<n;++i) printf("->%d",num[i]); printf("\n"); continue; } if(num[n-2]==0&&num[n-1]==0){ printf("YES\n"); int flag; for(int i=0;i<n-2;++i){ if(num[i]==0){ flag=i; break; } } flag++; printf("%d",num[0]); for(int i=1;i<n;++i){ if(flag==i) printf("->("); else if(i==n-1) printf(")->"); else printf("->"); printf("%d",num[i]); } printf("\n"); } } }
相关文章推荐
- 多线程互斥,用到Synchronized
- Darwin流媒体服务器在windows下搭建
- 黑马程序员---java面向抽象/接口编程
- Storm入门之第8章事务性拓扑
- hbmy周赛1--D
- Storm入门之第8章事务性拓扑
- 我偏执,我要变
- android 调用系统界面
- hbmy周赛1--D
- HDU 3535 AreYouBusy
- oracle分页
- Storm入门之第8章事务性拓扑
- 关于数组在内存中的存放形式
- 练习作品10:被一个傻叉坑了 要求把串口 封装到DLL中调用;
- asp.net开发微信公众平台之验证消息的真实性
- Count Complete Tree Nodes
- hbmy周赛1--C
- Storm入门之第6章一个实际的例子
- Linux内核与驱动开发学习总结:自旋锁和信号量(五)
- hbmy周赛1--C