WA20求调
查看原帖
WA20求调
1023189
wangtairan114楼主2024/7/11 17:55

rt

#include <cstring>
#include <string>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <limits.h>
#include <list>
#include <set>
#include <map>
#include <unordered_map>
using namespace std;
#define min(a,b) ((a)>(b)?(b):(a))
#define max(a,b) ((a)<(b)?(b):(a))
#define INF 0x3f3f3f3f
#define ll long long
#define sc scanf
#define pr printf
#define v1 first
#define v2 second
#define f(nm1,nm2,nm3) for(int nm1=nm2; nm1<= nm3; nm1++)
#define lowbit(x) (x&(-x))
//int a[10][10];
void drop(int a[10][10])
{
    for(int i=6; i>= 1; i--)
    {
        for(int j=1; j <= 5; j++)
        {
            if(a[i][j]==0&&a[i+1][j]>0)
            {
                swap(a[i][j],a[i+1][j]);
            }
        }
    }
}
bool b[10][10];
void clr(int a[10][10])
{
    drop(a);
    memset(b,0,sizeof(b));
    for(int i=1; i <= 7; i++)
    {
        for(int j=1; j <= 3; j++)
        {
            if(a[i][j]==a[i][j+1]&&a[i][j+1]==a[i][j+2]&&a[i][j]>0)
            {
                b[i][j]=1;
                b[i][j+1]=1;
                b[i][j+2]=1;
            }
        }
    }
    for(int j=1; j <= 5; j++)
    {
        for(int i=1; i <= 5; i++)
        {
            if(a[i][j]==a[i+1][j]&&a[i+1][j]==a[i+2][j]&&a[i][j]>0)
            {
                b[i][j]=1;
                b[i+1][j]=1;
                b[i+2][j]=1;
            }
        }
    }
    bool ok=0;
    for(int i=1; i <= 7; i++)
    {
        for(int j=1; j <= 5; j ++)
        {
            if(b[i][j])
            {
                ok=1;
                a[i][j]=0;
            }
        }
    }
    drop(a);
    if(ok)
        clr(a);
}
bool emp(int a[10][10])
{
    for(int i=1; i <= 7;i++)
    {
        for(int j=1; j <= 5; j++)
        {
            if(a[i][j])
                return 0;
        }
    }
    return 1;
}
void dfs(int k,int d,int a[10][10],stack<pair<pair<int,int>,int>> q)
{
    int rep[10][10];
    for(int i=1;i <= 7; i++)
    {
        for(int j=1; j <= 5; j++)
        {
            rep[i][j]=a[i][j];
        }
    }
    clr(rep);
    if(k>d)
    {
        if(emp(rep))
        {
            stack<pair<pair<int,int>,int>> st2;
            while(!q.empty())
            {
                st2.push(q.top());
                q.pop();
            }
            while(!st2.empty())
            {
                pr("%d %d %d\n",st2.top().v1.v2-1,st2.top().v1.v1-1,st2.top().v2);
                st2.pop();
            }
            exit(0);
        }
        return;
    }
    for(int i=1; i <= 7; i++)
    {
        for(int j=1; j <= 4; j++)
        {
            if(rep[i][j]!=rep[i][j+1])
            {
                swap(rep[i][j],rep[i][j+1]);
                if(rep[i][j]!=0){
                    q.push({{i,j},1});
                }
                else
                {
                    q.push({{i,j+1},-1});
                }
                dfs(k+1,d,rep,q);
                q.pop();
                swap(rep[i][j],rep[i][j+1]);
            }
        }
    }
}
int n;
int a[10][10];
signed main() {
    sc("%d",&n);
    for(int i=1; i <= 5; i++)
    {
        int x,j=0;
        while(cin>> x)
        {
            j++;
            if(x==0)
                break;
            a[j][i]=x;
        }
    }
    stack<pair<pair<int,int>,int>> q;
    n++;
    for(int i=1; i <= n; i++)
    {
        dfs(1,i,a,q);
    }
    pr("-1");
//    clr(a);
//    for(int i=1; i <= 7; i++)
//    {
//        for(int j=1; j <= 5; j++)
//        {
//            pr("%d ",a[i][j]);
//        }
//        pr("\n");
//    }
    return 0;
}
/*
 0
 1 0
 1 1 1 2 0
 1 2 2 0
 2 2 0
 */
2024/7/11 17:55
加载中...