记录编号 |
127855 |
评测结果 |
AAAAAAA |
题目名称 |
[HAOI 2005]破译密文 |
最终得分 |
100 |
用户昵称 |
水中音 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2014-10-16 14:03:57 |
内存使用 |
0.83 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<set>
using namespace std;
long long aiky=1;
int cd[27]={0},s1cd=0,s2cd=0,jiheshu,n,m,i,p,zj1,zj2;
char x,s[20000];
bool pan[20000]={0},pan2[20000]={0},qwq=false;
queue<char> s3,s4;
queue<int> s1,s2,A;
set<int> a[20000];
set<int>::iterator B;
void init()
{
scanf("%s",s);i=0;
while((s[i]>='a'&&s[i]<='z')||s[i]=='0'||s[i]=='1'){s3.push(s[i]);i++;}
scanf("%s",s);i=0;
while((s[i]>='a'&&s[i]<='z')||s[i]=='0'||s[i]=='1'){s4.push(s[i]);i++;}
scanf("%d",&n);
for(i=1;i<=n;i++)
{
cin>>x;scanf("%d",&zj1);
p=x-96;cd[p]=zj1;
}
while(!s3.empty())
{
x=s3.front();s3.pop();
if(x=='0'||x=='1') s1.push(x-'0');
else
{
p=x-96;
for(i=1;i<=cd[p];i++)
{zj1=p+100*i;pan2[zj1]=true;s1.push(zj1);}
}
}
while(!s4.empty())
{
x=s4.front();s4.pop();
if(x=='0'||x=='1') s2.push(x-'0');
else
{
p=x-96;
for(i=1;i<=cd[p];i++)
{zj1=p+100*i;pan2[zj1]=true;s2.push(zj1);}
}
}
}
void Get_sum()
{
while(!s1.empty())
{
zj1=s1.front();s1.pop();
zj2=s2.front();s2.pop();
if((zj1==1&&zj2==0)||(zj1==0&&zj2==1))
{
qwq=true;
break;
}
a[zj1].insert(zj2);a[zj2].insert(zj1);
}
if(qwq) aiky=0;
pan[0]=true;
for(B=a[0].begin();B!=a[0].end();B++)
{
pan[*B]=true;
A.push(*B);
}
while(!A.empty())
{
zj1=A.front();A.pop();
if(zj1==1)qwq=true;
for(B=a[zj1].begin();B!=a[zj1].end();B++)
if(!pan[*B])
{
pan[*B]=true;
A.push(*B);
}
}
pan[1]=true;
for(B=a[1].begin();B!=a[1].end();B++)
{pan[*B]=true;A.push(*B);}
while(!A.empty())
{
zj1=A.front();A.pop();
if(zj1==0)qwq=true;
for(B=a[zj1].begin();B!=a[zj1].end();B++)
if(!pan[*B]){pan[*B]=true;A.push(*B);}
}
if(qwq) aiky=0;
jiheshu=0;
for(i=1;i<=26;i++)
for(p=1;p<=cd[i];p++)
{
zj1=p*100+i;
if(!pan[zj1]&&pan2[zj1])
{
jiheshu++;
pan[zj1]=true;
for(B=a[zj1].begin();B!=a[zj1].end();B++)
{pan[*B]=true;A.push(*B);}
while(!A.empty())
{
zj2=A.front();A.pop();
for(B=a[zj2].begin();B!=a[zj2].end();B++)
if(!pan[*B]){pan[*B]=true;A.push(*B);}
}
}
}
}
int main()
{
freopen("encrypt.in","r",stdin);
freopen("encrypt.out","w",stdout);
init();
Get_sum();
for(i=1;i<=jiheshu;i++) aiky<<=1;
printf("%lld\n",aiky);
return 0;
}