为什么全部WA……

codevs上AC的代码拿这来就WA……
c++
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int n,value[26];
char str[3][27];
bool def[26];
void calc()
{
int up=0;
for(int i=n-1;i>=0;i--)
{
int num=value[str[0][i]-'A']+value[str[1][i]-'A']+up;
if(num%n!=value[str[2][i]-'A'])return;
up=num/n;
}
if(up>0)return;
cout<<value[0];
for(int i=1;i<n;i++)
cout<<" "<<value[i];
exit(0);
}
void dfs(int x,int y,int up)
{
if(x<0)
{
calc();
return;
}
if(def[value[str[y][x]-'A']])
{
if(y==2)
{
if((value[str[0][x]-'A']+value[str[1][x]-'A']+up)%n==value[str[2][x]-'A'])
dfs(x-1,0,(value[str[0][x]-'A']+value[str[1][x]-'A']+up)/n);
else return;
}
else
dfs(x,y+1,up);
}
else
{
int svalue=value[str[y][x]-'A'];
if(y==0)
{
if(def[value[str[1][x]-'A']]&&def[value[str[2][x]-'A']])
{
if(!def[(value[str[2][x]-'A']-up-value[str[1][x]-'A']+n)%n])
{
def[(value[str[2][x]-'A']-up-value[str[1][x]-'A']+n)%n]=1;
value[str[0][x]-'A']=(value[str[2][x]-'A']-up-value[str[1][x]-'A']+n)%n;
dfs(x,1,up);
def[(value[str[2][x]-'A']-up-value[str[1][x]-'A']+n)%n]=0;
}
}
else
{
for(int i=n-1;i>=0;i--)
if(!def[i])
{
value[str[0][x]-'A']=i;
def[i]=1;
dfs(x,1,up);
def[i]=0;
}
}
value[str[0][x]-'A']=svalue;
}
else
if(y==1)
{
if(def[value[str[2][x]-'A']])
{
if(!def[(value[str[2][x]-'A']-up-value[str[0][x]-'A']+n)%n])
{
def[(value[str[2][x]-'A']-up-value[str[0][x]-'A']+n)%n]=1;
value[str[1][x]-'A']=(value[str[2][x]-'A']-up-value[str[0][x]-'A']+n)%n;
dfs(x,2,up);
def[(value[str[2][x]-'A']-up-value[str[0][x]-'A']+n)%n]=0;
}
}
else
for(int i=n-1;i>=0;i--)
if(!def[i])
{
value[str[1][x]-'A']=i;
def[i]=1;
dfs(x,2,up);
def[i]=0;
}
value[str[1][x]-'A']=svalue;
}
else
if(y==2)
{
if(!def[(value[str[0][x]-'A']+value[str[1][x]-'A']+up)%n])
{
def[(value[str[0][x]-'A']+value[str[1][x]-'A']+up)%n]=1;
value[str[2][x]-'A']=(value[str[0][x]-'A']+value[str[1][x]-'A']+up)%n;
dfs(x-1,0,(value[str[0][x]-'A']+value[str[1][x]-'A']+up)/n);
def[(value[str[0][x]-'A']+value[str[1][x]-'A']+up)%n]=0;
}
value[str[2][x]-'A']=svalue;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>str[0]>>str[1]>>str[2];
for(int i=0;i<n;i++)
value[i]=-1;
dfs(n-1,0,0);
return 0;
}

0 条评论

目前还没有评论...

信息

ID
1099
难度
7
分类
搜索 | 搜索与剪枝 点击显示
标签
递交数
4720
已通过
1012
通过率
21%
被复制
22
上传者