http:// www.bnuoj.com/bnuoj/contest_show.php?cid=3902#problem/44159
在数的两边加上一对括号
#include<stdio.h> #include<string.h> #define N 200 #include<stack> using namespace std; struct node { int c,h; }cur,next; int main() { int i,len; char s[N]; while(scanf("%s",s)!=EOF) { stack<node>q; cur.c=0;cur.h=0; len=strlen(s); s[len]=')'; s[len+1]='1'; cur.c=0;cur.h=0; q.push(cur); q.push(cur); for(i=0;i<=len+1;i++) { if(s[i]=='C') { if(s[i+1]>='0'&&s[i+1]<='9') { cur.c+=s[i+1]-'0'; i++; } else cur.c++; } if(s[i]=='H') { if(s[i+1]>='0'&&s[i+1]<='9') { cur.h+=s[i+1]-'0'; i++; } else cur.h++; } if(s[i]=='(') { next=q.top(); q.pop(); next.c+=cur.c; next.h+=cur.h; q.push(next); cur.c=0;cur.h=0; q.push(cur); } if(s[i]==')') { next=q.top(); q.pop(); next.c+=cur.c; next.h+=cur.h; if(s[i+1]>='0'&&s[i+1]<='9') { cur=q.top(); q.pop(); cur.c=cur.c+next.c*(s[i+1]-'0'); cur.h=cur.h+next.h*(s[i+1]-'0'); q.push(cur);i++; } else { cur=q.top(); q.pop(); cur.c+=next.c; cur.h+=next.h; q.push(cur); } cur.c=0; cur.h=0; } } next=q.top(); if(next.h==next.c*2+2) printf("Alkane "); else printf("Alkene "); } return 0; }