社区讨论
80pts,求助
P1092[NOIP 2004 提高组] 虫食算参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lz3h0978
- 此快照首次捕获于
- 2024/07/27 09:46 2 年前
- 此快照最后确认于
- 2024/07/27 11:24 2 年前
rt,#8 #9 TLE
CPP#include <bits/stdc++.h>
#define l long long
#define re register
#define rl re l
#define cin std::cin
#define printf std::printf
using namespace std;
string a,b,s;
bool flag=0;
l n,p[1006];
bool bb[27];
void dfs(l st,l le)
{
if(flag) return ;
if(st==0)
{
for(char i='A';i<'A'+n;i++)
{
printf("%lld ",p[i]);
}
flag=1;
return ;
}
if(p[a[st]]==1000)
{
if(p[s[st]]!=1000&&p[b[st]]!=1000)
{
l t=p[s[st]]-le-p[b[st]];
if(t<0)
{
t+=n;
}
if(bb[t])
{
return ;
}
else
{
bb[t]=1;
p[a[st]]=t;
dfs(st,le);
bb[t]=0;
p[a[st]]=1000;
}
}
else
for(rl i=n-1;i>=0;i--)
{
if(!bb[i])
{
bb[i]=1;
p[a[st]]=i;
dfs(st,le);
bb[i]=0;
p[a[st]]=1000;
}
}
}
if(p[b[st]]==1000)
{
if(p[s[st]]!=1000&&p[a[st]]!=1000)
{
l t=p[s[st]]-le-p[a[st]];
if(t<0)
{
t+=n;
}
if(bb[t])
{
return ;
}
else
{
bb[t]=1;
p[b[st]]=t;
dfs(st,le);
bb[t]=0;
p[b[st]]=1000;
}
}
else
for(rl i=0;i<n;i++)
{
if(!bb[i])
{
bb[i]=1;
p[b[st]]=i;
dfs(st,le);
bb[i]=0;
p[b[st]]=1000;
}
}
}
if(p[s[st]]==1000)
{
if(p[a[st]]!=1000&&p[b[st]]!=1000)
{
if(bb[(p[a[st]]+p[b[st]]+le)%n])
{
return ;
}
else
{
bb[(p[a[st]]+p[b[st]]+le)%n]=1;
p[s[st]]=(p[a[st]]+p[b[st]]+le)%n;
dfs(st,le);
bb[(p[a[st]]+p[b[st]]+le)%n]=0;
p[s[st]]=1000;
}
}
else
{
for(rl i=n-1;i>=0;i--)
{
if(!bb[i])
{
bb[i]=1;
p[s[st]]=i;
dfs(st,le);
bb[i]=0;
p[s[st]]=1000;
}
}
}
}
if(p[s[st]]==1000||p[b[st]]==1000||p[a[st]]==1000) return ;
if(st==1&&p[a[st]]+p[b[st]]+le>=n) return ;
if(p[a[st]]+p[b[st]]+le==p[s[st]])
{
dfs(st-1,0);
}
else if((p[a[st]]+p[b[st]]+le)%n==p[s[st]])
{
dfs(st-1,1);
}
else
{
return ;
}
}
void mian()
{
cin>>n;
cin>>a>>b>>s;
for(char i='A';i<='Z';i++)
{
p[i]=1000;
}
a=" "+a,b=" "+b,s=" "+s;
dfs(n,0);
}
int main()
{
mian();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...