题解:这道题用 map 做的话是很简单的,构建两个map<string, int >,一个用来储存正确的翻译个数,一个用来储存储存错误的翻译个数,总的和正确的可以轻松求出,错误的就是总的减去正确的。
如果总方案数为1,正确的也为1, 那么就输出正确的翻译和 correct;
否则输出错误的翻译和 incorrect;
#include<cstdio>
#include<iostream>
#include<map>
#include<string>
using namespace std;
typedef long long LL;
int n,m,i;
string a[100];
LL tot,co;
map<string,int>t,f;
map<string,string>o;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
cin>>m;
while(m--)
{
string x,y,z;
cin>>x>>y>>z;
o[x]=y;
if(z[0]=='c') t[x]++;//正确的
else f[x]++;//错误的;
}
tot=1;
co=1;
for(i=1; i<=n; i++)
{
tot*=t[a[i]]+f[a[i]];
co*=t[a[i]];
}
if(tot==1)
{
for(i=1;i<=n; i++)
cout<<o[a[i]]<<" "<<endl;
if(co==1) printf("correct");
else printf("incorrect");
}
else
{
cout<<co<<" correct"<<endl;
cout<<tot-co<<" incorrect"<<endl;
}
return 0;
}