- 本人第一次做交互题,结果WA一个点,不知道怎么调试,已经干瞪眼很久了。。。
- 恳求大佬教我怎么调试,或者指出代码错在哪 orz
- WA的那个点
#include<iostream>
#include<cstdio>
#define N 110
#define M 4010
using namespace std;
void init();
void look(int&, bool&);
void put_sign();
void take_sign();
void walk(int);
void report(int, int);
int n,m,d,mark,fa[110],tmp[110],size[110];
bool ban[110][110],si;
void dfs(int x){
look(d,si);
n++,m+=d,size[x]=d;
for(int i=1;i<size[x];i++){
if(ban[x][i]){
continue;
}
tmp[x]=i;
fa[x]=size[x]-i;
walk(i);
look(d,si);
put_sign();
bool flag=0;
walk(0);
look(d,si);
for(int j=x;j>1;j--){
walk(fa[j]);
look(d,si);
if(si){
flag=1;
mark=j-1;
break;
}
}
walk(0);
look(d,si);
for(int j=(flag?mark+1:2);j<=x;j++){
walk(tmp[j]);
look(d,si);
}
take_sign();
if(flag){
walk(0);
look(d,si);
put_sign();
for(int j=x;j>=mark+1;j--){
walk(fa[j]);
look(d,si);
}
for(int j=1;j<size[mark];j++){
walk(1);
look(d,si);
if(si){
ban[mark][(tmp[mark]+j)%size[mark]]=1;
walk(0);
look(d,si);
walk(size[mark]-j);
look(d,si);
for(int j=mark+1;j<x;j++){
walk(tmp[j]);
look(d,si);
}
take_sign();
break;
}else walk(0);
}
}else{
dfs(x+1);
walk(0);
look(d,si);
walk(fa[x]);
look(d,si);
walk(0);
look(d,si);
}
}
}
int main(){
init();
n++;
look(size[1],si);
m+=size[1];
for(int i=0,pre=0;i<size[1];i++){
if(ban[1][i])continue;
walk(i-pre);
tmp[1]=i;
dfs(2);
walk(0);
look(d,si);
pre=i;
}
report(n,m/2);
}