萌新刚学OI,求帮忙看看为什么50pts

P1312 [NOIP2011 提高组] Mayan 游戏

现在的求助帖都只丢代码的?
by SilviaLss @ 2021-10-13 20:15:03


@[multiply](/user/121275) 草 忘加了 ```cpp #include <bits/stdc++.h> using namespace std; using m=int[6][8]; bool flag; vector<tuple<int,int,int>>ans; int a[6][8],n; bool check(m a){//检查当前的a是否已经全部清空 bool k=1; for(int i=1;i<=5&&k;i++)k&=!a[i][1]; return k; } void clean(m a){//模拟消除过程 bool k=1; while(k){ k=0;bool b[6][8]={}; for(int i=1;i<=5;i++) for(int j=1;j<=7;j++)if(a[i][j]){ int lx=i,rx=i,ly=j,ry=j; while(lx-1>=1&&a[lx-1][j]==a[lx][j])lx--; while(rx+1<=5&&a[rx+1][j]==a[rx][j])rx++; while(ly-1>=1&&a[i][ly-1]==a[i][ly])ly--; while(ry+1<=7&&a[i][ry+1]==a[i][ry])ry++;//分别向四个方向延伸寻找连通块 if(rx-lx+1>=3)for(;lx<=rx;lx++)b[lx][j]=1,k=1; if(ry-ly+1>=3)for(;ly<=ry;ly++)b[i][ly]=1,k=1; }//检测到3个相同的色块就消除 for(int i=1;i<=5;i++) for(int j=1;j<=7;j++)if(b[i][j])a[i][j]=0; for(int i=1;i<=5;i++) for(int j=1;j<=7;j++)if(!a[i][j]){ int t=j; while(t<=7&&!a[i][t])t++; if(t>7)break; for(int l=j;l+t-j<=7;l++)a[i][l]=a[i][l+t-j]; for(int l=8+j-t;l<=7;l++)a[i][l]=0; }//模拟下落 } } void dfs(int now,m a){ if(now==n){ if(check(a)){ for(auto [a,b,c]:ans)printf("%d %d %d\n",a-1,b-1,c);//找到答案,输出 exit(0); } return; } m t;memcpy(t,a,sizeof(int)*6*8);//备份当前状态 for(int i=1;i<=4;i++) for(int j=1;j<=7;j++)if(a[i][j]&&a[i][j]^a[i+1][j])swap(a[i][j],a[i+1][j]),clean(a),ans.emplace_back(i,j,1),dfs(now+1,a),memcpy(a,t,sizeof(int)*6*8),ans.pop_back();//搜索:右移 for(int i=2;i<=5;i++) for(int j=1;j<=7;j++)if(a[i][j]&&!a[i-1][j])swap(a[i][j],a[i-1][j]),clean(a),ans.emplace_back(i,j,-1),dfs(now+1,a),memcpy(a,t,sizeof(int)*6*8),ans.pop_back();//搜索:左移 } int main(){ #ifndef ONLINE_JUDGE #define FILE_OUTPUT #ifdef FILE_OUTPUT freopen("P1312.in","r",stdin); freopen("P1312.out","w",stdout); #endif long long c1=clock(); #endif scanf("%d",&n); for(int i=1;i<=5;i++){ int k; for(int j=1;j<=7;j++){ scanf("%d",&k); if(!k)break; a[i][j]=k; } } // clean(a); dfs(0,a); puts("-1"); #ifndef ONLINE_JUDGE //#define DEBUG #ifdef DEBUG freopen("CON","w",stdout); #endif puts("\n--------------------------------"); printf("Process exited after %g seconds with return value 0\n",(clock()-c1)/1000.0); #ifdef DEBUG system("pause"); #endif #endif return 0; } ```
by 引领天下 @ 2021-10-13 20:21:59


没事了 过了
by 引领天下 @ 2021-10-13 21:11:52


|