社区讨论
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 条回复,欢迎继续交流。
正在加载回复...