社区讨论
我女装学搜索还是玄学WA,求助
P1092[NOIP 2004 提高组] 虫食算参与者 25已保存回复 25
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 25 条
- 当前快照
- 1 份
- 快照标识符
- @mi6tiy3o
- 此快照首次捕获于
- 2025/11/20 10:34 4 个月前
- 此快照最后确认于
- 2025/11/20 15:02 4 个月前
这道题我打了4份代码了,真的心累,为什么有时候会没有解输出,比如这组数据:
CPP8
ABDEBEHG
FGDBBAGB
EDEDCHGE
这是代码
CPP#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <map>
using namespace std;
const int maxn=31;
char s1[maxn],s2[maxn],s3[maxn];
int a[5][maxn],f[maxn],n,work=0;
bool vis[maxn];
inline bool check(){
for(register int i=1;i<=n;i++)
if(f[i]==-1)return 0;
return 1;
}
inline bool finish(){
int forward=0;
for(register int i=n;i>=1;i--){
//if(f[i]==-1)return 0;
if((f[a[1][i]]+f[a[2][i]]+forward)%n!=f[a[3][i]])return 0;
forward=(f[a[1][i]]+f[a[2][i]]+forward)/n;
}
return 1;
}
inline void init(){
scanf("%d",&n);
scanf("%s",s1);scanf("%s",s2);scanf("%s",s3);
for(register int i=0;i<n;i++){
a[1][i+1]=s1[i]-'A'+1,a[2][i+1]=s2[i]-'A'+1,a[3][i+1]=s3[i]-'A'+1;
}
memset(f,-1,sizeof(f));
return ;
}
inline bool ok(){
if(f[a[1][1]]+f[a[2][1]]>=n)return 0;
for(register int i=n;i>=1;i--){
int x=f[a[1][i]],y=f[a[2][i]],z=f[a[3][i]];
if(x==-1||y==-1||z==-1)continue;
if((x+y)%n!=z&&(x+y+1)%n!=z)return 0;
}
return 1;
}
bool dfs(int line,int now,int forward){
cout<<line<<' '<<now<<endl;
if(!ok())return 0;
if(check()){
if(work==n||finish()){
for(register int i=1;i<=n;i++)printf("%d ",f[i]);
return 1;//exit(0);
}
return 0;
}
int x=a[line][now];
if(f[x]==-1){
for(register int i=n-1;i>=0;i--){
if(!vis[i]){
if(line!=3){
f[x]=i,vis[i]=1;
if(dfs(line+1,now,forward))return 1;
f[x]=-1,vis[i]=0;
}
else{
int sum=f[a[1][now]]+f[a[2][now]]+forward;
if(sum%n!=i)continue;
f[x]=i,vis[i]=1,work++;
if(dfs(1,now-1,sum/n))return 1;
f[x]=-1,vis[i]=0,work--;
}
}
}
}
else{
if(line!=3)if(dfs(line+1,now,forward))return 1;
else{
if(!ok())return 0;
work++;
if(dfs(1,now-1,(f[a[1][now]]+f[a[2][now]]+forward)/n))return 1;
work--;
}
}
return 0;
}
int main()
{
init();
dfs(1,n,0);
return 0;
}
回复
共 25 条回复,欢迎继续交流。
正在加载回复...