模拟类似括号匹配
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\n");
else
printf("Alkene\n");
}
return 0;
}
浙公网安备 33010602011771号