@zzzc18
2017-05-21T05:44:42.000000Z
字数 3339
阅读 1618
TEST

暴力模拟即可
巨难调
PS:加随机数,加点输出优化就可以玩了
#include<cstdio>#include<cstring>using namespace std;int MAP[10][10],pre[10][10];int n,m,ans;int x1,x2,y1,y2;int D,K,V;bool pd=0;void SWAP(int &x,int &y){int t=x;x=y;y=t;}void DEBUG(){int i,j;printf("MAP:\n");for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%d ",MAP[i][j]);}printf("\n");}printf("PRE:\n");for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%d ",pre[i][j]);}printf("\n");}printf("\n");}void PRE(){int i,j;for(i=1;i<=n;i++){for(j=1;j<=n;j++){pre[i][j]=MAP[i][j];}}}bool check(){int i,j;int cnt=0,cnt1=0;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(pre[i][j]==MAP[i][j])cnt++;if(!MAP[i][j])cnt1++;}}if(cnt==n*n)return false;return true;}bool check1(){int i,j;int cnt1=0;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(!MAP[i][j])cnt1++;}}if(cnt1==0)return false;else return true;}void slide0(int x){int i;int tt[10];int tcnt=0;memset(tt,0,sizeof(tt));for(i=1;i<=n;i++)if(MAP[i][x]>0)tt[++tcnt]=MAP[i][x],MAP[i][x]=0;for(i=1;i<=tcnt;i++)MAP[i][x]=tt[i];}void slide1(int x){int i;int tt[10];int tcnt=0;memset(tt,0,sizeof(tt));for(i=n;i>=1;i--)if(MAP[i][x]>0)tt[++tcnt]=MAP[i][x],MAP[i][x]=0;for(i=1;i<=tcnt;i++)MAP[n-i+1][x]=tt[i];}void slide2(int x){int i;int tt[10];int tcnt=0;memset(tt,0,sizeof(tt));for(i=1;i<=n;i++)if(MAP[x][i])tt[++tcnt]=MAP[x][i],MAP[x][i]=0;for(i=1;i<=tcnt;i++)MAP[x][i]=tt[i];}void slide3(int x){int i;int tt[10];int tcnt=0;memset(tt,0,sizeof(tt));for(i=n;i>=1;i--)if(MAP[x][i])tt[++tcnt]=MAP[x][i],MAP[x][i]=0;for(i=1;i<=tcnt;i++)MAP[x][n-i+1]=tt[i];}int work0(int x){//upint i;int re=0;for(i=1;i<=n-1;i++){int start=i;int loc=i+1;while(MAP[i+1][x]==0 && i<=n-1){i++;loc=i+1;}if(MAP[start][x]==MAP[loc][x] && MAP[start][x] && MAP[loc][x]){MAP[start][x]+=MAP[loc][x];re+=MAP[start][x];MAP[loc][x]=0;i++;}}slide0(x);return re;}int work1(int x){int i;int re=0;for(i=n;i>=2;i--){int start=i;int loc=i-1;while(MAP[i-1][x]==0 && i>=2){i--;loc=i-1;}if(MAP[start][x]==MAP[loc][x] && MAP[start][x] && MAP[loc][x]){MAP[start][x]+=MAP[loc][x];re+=MAP[start][x];MAP[loc][x]=0;i--;}}slide1(x);return re;}int work2(int x){//leftint i;int re=0;for(i=1;i<=n-1;i++){int start=i;int loc=i+1;while(MAP[x][i+1]==0 && i<=n-1){i++;loc=i+1;}if(MAP[x][start]==MAP[x][loc] && MAP[x][start] && MAP[x][loc]){MAP[x][start]+=MAP[x][loc];re+=MAP[x][start];MAP[x][loc]=0;}}slide2(x);return re;}int work3(int x){int i;int re=0;for(i=n;i>=2;i--){int start=i;int loc=i-1;while(MAP[x][i-1]==0 && i>=2){i--;loc=i-1;}if(MAP[x][start]==MAP[x][loc] && MAP[x][start] && MAP[x][loc]){MAP[x][start]+=MAP[x][loc];re+=MAP[x][start];MAP[x][loc]=0;}}slide3(x);return re;}void move0(){int i;for(i=1;i<=n;i++)ans+=work0(i);}void move1(){int i;for(i=1;i<=n;i++)ans+=work1(i);}void move2(){int i;for(i=1;i<=n;i++)ans+=work2(i);}void move3(){int i;for(i=1;i<=n;i++)ans+=work3(i);}bool solve(){//0上 1下 2左 3右if(D==0)move0();if(D==1)move1();if(D==2)move2();if(D==3)move3();if(!check())return 1;int i,j;int cnt=0;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(!MAP[i][j])cnt++;}}if(cnt==0){return 1;}K=K%cnt+1;cnt=0;return 0;}void newnum(){int i,j,cnt=0;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(!MAP[i][j])cnt++;if(cnt==K){MAP[i][j]=V;return;}}}}int main(){freopen("game.in","r",stdin);freopen("game.out","w",stdout);scanf("%d%d",&n,&m);int a,b;scanf("%d%d%d%d%d%d",&x1,&y1,&a,&x2,&y2,&b);MAP[x1][y1]=a;MAP[x2][y2]=b;int i;int tot=0;PRE();for(i=1;i<=m;i++){scanf("%d%d%d",&D,&K,&V);if(solve())break;newnum();PRE();tot++;}printf("%d\n",tot);printf("%d\n",ans);return 0;}