社区讨论

70 Wa 细节求助

P1312[NOIP 2011 提高组] Mayan 游戏参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo2m56y5
此快照首次捕获于
2023/10/23 16:05
2 年前
此快照最后确认于
2023/10/23 16:05
2 年前
查看原帖
似乎有些操作有问题,但是不知道在哪里
CPP
#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(int i=j;i<=n;i++)
#define Tr(v,e) for(int v:e)
#define D double
#define ps push_back
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=1e6+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,ans=0,t=0,l,r,len,T;
ll mini=INT_MAX,maxi=0,p=998244353;
string s1,s2;
ll a[15][15],b[305][15][15],f[15][15];
struct Node{
	ll x,y,d;
}R[N];
void print(ll n){
	F(i,1,n) cout<<R[i].y-1<<" "<<R[i].x-1<<" "<<R[i].d<<"\n";
}
void update(){
	F(j,1,5){
		ll h=0;
		F(i,1,7){
			if(!a[i][j]) h++;
			else{
				if(!h) continue;
				a[i-h][j]=a[i][j];
				a[i][j]=0;
			}
		}
	} 
} 
bool move(){
	ll Can=0;
	F(i,1,7) F(j,1,5){
		if(i>=2&&i<=6&&a[i][j]==a[i-1][j]&&a[i][j]==a[i+1][j]&&a[i][j]) f[i-1][j]=1,f[i+1][j]=1,f[i][j]=1,Can=1;
        if(j>=2&&j<=4&&a[i][j]==a[i][j+1]&&a[i][j]==a[i][j-1]&&a[i][j]) f[i][j]=1,f[i][j+1]=1,f[i][j-1]=1,Can=1;
	}
	if(!Can) return 0;
	F(i,1,7) F(j,1,5) if(f[i][j]) f[i][j]=a[i][j]=0;
	return 1;
}
void Done(ll i,ll j,ll x){
	swap(a[i][j],a[i][j+x]);
	update();
	while(move()) update();
}
void A(ll id){
	F(i,1,7) F(j,1,5) a[i][j]=b[id][i][j];
}
void B(ll id){
	F(i,1,7) F(j,1,5) b[id][i][j]=a[i][j];
}
bool check(){
	F(j,1,5) if(a[1][j]) return 0;
	return 1;
}
inline void dfs(ll id){
	if(id>n){
		if(check()&&id==n+1){
			print(id-1);
			exit(0);
		}
		return ;	
	}
	F(i,1,7) F(j,1,5){
		if(!a[i][j]) continue;
		if(a[i][j]!=a[i][j+1]&&j<=4){
			B(id);
			Done(i,j,1);
			R[id].x=i,R[id].y=j,R[id].d=1;
			dfs(id+1);
			A(id);
		}
		if(a[i][j]!=a[i][j-1]&&j>=2){
			B(id);
			Done(i,j,-1);
			R[id].x=i,R[id].y=j,R[id].d=-1;
			dfs(id+1);
			A(id);
		}
	}
}
int main(){
    Test;
	cin>>n;
	F(j,1,5){
		ll i=0;
		while(cin>>x){
			if(!x) break;
			a[++i][j]=x;
		}
	}
	dfs(1);
	cout<<-1; 
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...