#include <IOSTREAM>//vs运行完全正确,且getline输入完美。另,从vs复制过来的代码自带颜色,赞一个!
#include <STRING>
#include <CCTYPE>
using namespace std;
int times[2][52] = {0};
int side;
int x,y;
string s;
string::iterator i;
void count(char c,int add);
int main()
{
while(getline(cin,s))
{
side = 0;
for (int j=0;j<2;j++)
for (int k=0;k<52;k++)
times[j][k] = 0;
i = s.begin();
x = y = 1;
while (i!=s.end())
{
if (isalpha(*i)) //字母
{
count(*i,x);
}
else if (isdigit(*i)&&(i==s.begin()||!isalpha(*(i-1))))
{
x = int(*i)-48;
}
else if (isdigit(*i)&&isalpha(*(i-1)))
{
y = int(*i)-48;
count(*(i-1),(y-1)*x);
if (islower(*(i-1)))
{
count(*(i-2),(y-1)*x);
}
}
else if (*i=='+')
{
x = 1;
}
else if (*i=='=')
{
side = 1;
x = 1;
}
else if (*i=='(')
{
;
}
else if (*i==')')
{
if ((i+1)!=s.end()&&isdigit(*(i+1)))
{
y = int(*(i+1))-48;
string::iterator back = i-1;
int mid_y = 1;
while (*back!='(' )
{
if (isalpha(*back))
{
count(*back,(y-1)*x);
back--;
}
else if (isdigit(*back))
{
mid_y = int(*back)-48;
back-=2;
count(*(back-1),(y-1)*x*mid_y);
if (islower(*(back-1)))
{
count(*(back-2),(y-1)*x*mid_y);
back-=3;
}
}
}
}
}
i++;
}
int flag = 1;
for(int k=0;k<52;k++)
if(times[0][k]!=times[1][k]) flag = 0;
if(flag) cout<<"YES" <<endl;
else cout<<"NO" <<endl;
}
return 1;
}
void count(char c,int add)
{
int index;
if(c>65&&c<90) index = int(c)-65;
else index = int (c)-97+26;
times[side][index]+=add;
}
hdu化学方程式。。TLE。。。
最新推荐文章于 2024-07-29 18:57:33 发布