首页 > 代码库 > hdu 4915 Parenthese sequence 多校第五场
hdu 4915 Parenthese sequence 多校第五场
推断一个序列是否是有效是简单的。
可是推断序列是不是有多个解会出问题。
那么从i=0 ~l
假设读到问号,推断该问号成为(能否有效,该问号为)是否有效。
假设都有效,则必有多个解。
假设都无效,则无解。
假设一个有效,则把问号改成有效的括号。
代码实现例如以下
#include<stdio.h> #include<string.h> char s[1000005],tp[1000005]; int l; int pd() { int zuo,you,num,i; num=0; zuo=0; you=0; for(i=0;i<l;i++) { num++; if(num==1) { if(tp[i]=='?') tp[i]='('; } if(tp[i]=='(') zuo++; if(tp[i]==')') you++; if(you>num/2) { return 0; } if(num%2==0) { if(you==num/2) { zuo=0; you=0; num=0; } } } if(zuo>num/2) return 0; num=0; zuo=0; you=0; for(i=l-1;i>=0;i--) { num++; if(num==1) { if(tp[i]=='?') tp[i]=')'; } if(tp[i]=='(') zuo++; if(tp[i]==')') you++; if(zuo>num/2) { return 0; } if(num%2==0) { if(zuo==num/2) { zuo=0; you=0; num=0; } } } if(you>num/2) return 0; return 1; } int main() { int zuo,you,x,y,i; while(scanf("%s",s)!=EOF) { l=strlen(s); if(l%2==1) { printf("None\n"); continue; } else { strcpy(tp,s); x=pd(); if(x==0) { printf("None\n"); continue; } for(i=0;i<l;i++) { if(s[i]=='?') { strcpy(tp,s); tp[i]=')'; x=pd(); strcpy(tp,s); tp[i]='('; y=pd(); if(x+y==2) {printf("Many\n"); break; } if(x+y==0) { printf("None\n"); break; } if(x==1) s[i]=')'; else s[i]='('; } } if(i==l) { printf("Unique\n"); } } } return 0; }
hdu 4915 Parenthese sequence 多校第五场
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。