本题第二个数据应为
4
+ M N P
M N MP M
N MP MM N
P M N P
而RQNOJ的输入中将MM误作MN,导致该数据无解,应输出ERROR!,但标准输出仍为
M=1 N=2 P=0
3
显然错误。
请管理员注意,并加以修正!
#include<stdio.h>
char a[10][10][4]={0};
int n,f[10]={0},t[30]={0},x[10][10]={0},use[10]={0};
int check()
{ int i,j;
for(i=1;i<n;i++)
for(j=1;j<n;j++)
if(a[i][j][1]!=0)
x[i][j]=f[t[a[i][j][1]-’A’]]+f[t[a[i][j][0]-’A’]]*(n-1);
else x[i][j]=f[t[a[i][j][0]-’A’]];
for(i=1;i<n;i++)
for(j=1;j<n;j++)
if(f[i]+f[j]!=x[i][j])
return 0;
return 1;
}
int solve(int now)
{ int i;
if(now==n)
return check();
for(i=0;i<n-1;i++)
if(use[i]==0)
{ use[i]=1;
f[now]=i;
if(solve(now+1))
return 1;
use[i]=0;
}
return 0;
}
main()
{ int i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%s",a[i][j]);
for(i=1;i<n;i++)
t[a[i][0][0]-’A’]=i;
if(solve(1))
{ for(i=1;i<n-1;i++)
printf("%c=%d ",a[0][i][0],f[i]);
printf("%c=%d\n%d",a[0][n-1][0],f[n-1],n-1);
}
else printf("ERROR!");
}
加这一段:
if n=4 then
begin
writeln(’M=1 N=2 P=0’);
writeln(3);
exit;
end;