社区讨论

神犇救我!!!

P2033Chessboard Dance参与者 5已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@mi6lrdol
此快照首次捕获于
2025/11/20 06:57
4 个月前
此快照最后确认于
2025/11/20 06:57
4 个月前
查看原帖
280行代码。。不知道该咋改了。。哭死。神犇救命!
CPP
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define LL long long
#define HQH main
//by HQH
//2017/10/16
using namespace std;
int read()
{
    int f=1,p=0;char x;
    x=getchar();
    while(x<'0'||x>'9')
    {
        if(x=='-') f=-1;
        x=getchar();
    }
    while(x>='0'&&x<='9')
    {
        p=p*10+x-'0';
        x=getchar();
    }
    return f*p;
}
int maps[10][10];
char chess[70]={0};
int kind[70],cnt=1,num=4;
int start_i,start_j;
int tox,toy;
int step;
void check(int x,int y,int direction,int step)
{
    if(direction==1)
    {
        if(x==1) return;
        else
        {
            if(x-step<=0)
            {
                for(int i=x-1;i>=1;i--)
                {
                    if(maps[i][y]!=0)
                    {
                        for(int j=0;j<=x;j++)
                            maps[j][y]=maps[j+1][y];
                        break;
                    }
                    if(i==1) swap(maps[x][y],maps[i][y]),start_i=i;
                }    
            }
            else
            {
                for(int i=x-1;i>=x-step;i--)
                {
                    if(maps[i][y]!=0)
                    {
                        for(int j=0;j<=x;j++)
                            maps[j][y]=maps[j+1][y];
                        break;
                    }
                    if(i==x-step) swap(maps[x][y],maps[i][y]),start_i=i;
                }    
            }
        }
    }
    if(direction==2)
    {
        if(y==8) return;
        else
        {
            if(y+step>=8)
            {
                for(int i=y+1;i<=8;i++)
                {
                    if(maps[x][i]!=0)
                    {
                        for(int j=9;j>=y;j--)
                            maps[x][j]=maps[x][j-1];
                        break;
                    }
                    if(i==8)  swap(maps[x][y],maps[i][y]),start_j=i;
                }    
            }
            else
            {
                for(int i=y+1;i<=y+step;i++)
                {
                    if(maps[x][i]!=0)
                    {
                        for(int j=9;j>=y;j--)
                            maps[x][j]=maps[x][j-1];
                        break;
                    }
                    if(i==y+step)  swap(maps[x][y],maps[x][i]),start_j=i;
                }    
            }
        }
    }
    if(direction==3)
    {
        if(x==8) return;
        else
        {
            if(x+step>=8)
            {
                for(int i=x+1;i<=8;i++)
                {
                    if(maps[i][y]!=0)
                    {
                        for(int j=9;j>=x;j--)
                            maps[j][y]=maps[j-1][y];
                        break;
                    }
                    if(i==8) swap(maps[x][y],maps[i][y]),start_i=i;
                }    
            }
            else
            {
                for(int i=x+1;i<=x+step;i++)
                {
                    if(maps[i][y]!=0)
                    {
                        for(int j=9;j>=x;j--)
                            maps[j][y]=maps[j-1][y];
                        break;
                    }
                    if(i==x+step) swap(maps[x][y],maps[i][y]),start_i=i;
                }    
            }
        }
    }
    if(direction==4)
    {
        if(y==1) return;
        else
        {
            if(y-step<=0)
            {
                for(int i=y-1;i>=1;i--)
                {
                    if(maps[x][i]!=0)
                    {
                        for(int j=0;j<=y;j++)
                            maps[x][j]=maps[x][j+1];
                        break;
                    }
                    if(i==1)  swap(maps[x][y],maps[x][i]),start_j=i;
                }    
            }
            else
            {
                for(int i=y-1;i>=y-step;i--)
                {
                    if(maps[x][i]!=0)
                    {
                        for(int j=0;j<=y;j++)
                            maps[x][j]=maps[x][j+1];
                        break;
                    }
                    if(i==y-step)  swap(maps[x][y],maps[x][i]),start_j=i;
                }    
            }
        }
    }
}
void turn(int direction,char x)
{
    if(x=='l')
    {
        maps[start_i][start_j]--;
        if(maps[start_i][start_j]==0) maps[start_i][start_j]=4;
    }
    else if(x=='r')
    {
        maps[start_i][start_j]++;
        if(maps[start_i][start_j]==5) maps[start_i][start_j]=1;
    }
    else if(x=='b')
    {
        maps[start_i][start_j]+=2;
        if(maps[start_i][start_j]==5) maps[start_i][start_j]=1;
        if(maps[start_i][start_j]==6) maps[start_i][start_j]=2;
    }
}
int HQH()
{
    for(int i=1;i<=8;i++)
        for(int j=1;j<=8;j++)
        {
            char x;
            scanf("%c",&x);
            if(x=='.') maps[i][j]=0;
            else if(x=='^') maps[i][j]=1,start_i=i,start_j=j;
            else if(x=='>') maps[i][j]=2,start_i=i,start_j=j;
            else if(x=='v') maps[i][j]=3,start_i=i,start_j=j;
            else if(x=='<') maps[i][j]=4,start_i=i,start_j=j;
            else
            {
                for(int l=1;l<=cnt;l++)
                {
                    if(chess[l]==x)
                    {
                        maps[i][j]=kind[l];
                        break;
                    }    
                    if(l==cnt)
                    {
                        cnt++;
                        chess[cnt]=x,kind[cnt]=++num,maps[i][j]=kind[cnt];
                        break;
                    }
                }
            }            
            if(j==8) scanf("%c",&x);
        }
//    for(int i=1;i<=8;i++)
//    {
//        for(int j=1;j<=8;j++)
//        {
//            cout<<maps[i][j];
//        }
//        cout<<endl;
//    }    
    char ch;
    while(scanf("%c",&ch))
    {
        if(ch=='#') break;
        if(ch=='\n') continue;
        if(ch=='m')
        {
            for(int i=1;i<=5;i++)
            {
                scanf("%c",&ch);
                if(i==5)
                    step=ch-'0',check(start_i,start_j,maps[start_i][start_j],step);
            }
        }
        else if(ch=='t')
        {
            scanf("%c",&ch);
            if(ch=='u')
            for(int i=1;i<=4;i++)
            {
                scanf("%c",&ch);
                if(i==4)
                turn(maps[start_i][start_j],ch);
            }
        }
    }
    for(int i=1;i<=8;i++)
    {
        for(int j=1;j<=8;j++)
        {
            if(maps[i][j]==0) cout<<'.';
            else if(maps[i][j]==1) cout<<'^';
            else if(maps[i][j]==2) cout<<'>';
            else if(maps[i][j]==3) cout<<'v';
            else if(maps[i][j]==4) cout<<'<';
            else
            {
                for(int l=1;l<=cnt;l++)
                {
                    if(kind[l]==maps[i][j])
                    {
                        cout<<chess[l];
                        break;
                    }
                 } 
            }
        }
        cout<<endl;
    }
    return 0;
}

回复

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

正在加载回复...