1 条题解

  • 0
    @ 2025-8-24 21:59:59

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cxq2002
    **

    搬运于2025-08-24 21:59:59,当前版本为作者最后更新于2018-08-25 22:26:21,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    #简单的枚举 注意: 翻转九十度,五种俄罗斯方块有不同情况。 图一无变化。 图二,图三和图四有两种变化。 图五有四种变化。 但是数据水,可以else直接过,不需要考虑。

    直接存在数组中,从头到尾扫描一遍。

    #include<bits/stdc++.h>
    using namespace std;
    char s[11][11];
    int sum[6],n,m,i,j;
    void remove(int x,int y)
    {
        char c=s[x][y];
        s[x][y]='.';
        if(s[x-1][y]==c) remove(x-1,y);
        if(s[x+1][y]==c) remove(x+1,y);
        if(s[x][y-1]==c) remove(x,y-1);
        if(s[x][y+1]==c) remove(x,y+1);
    }
    int check(int x,int y)
    {
        char c=s[x][y];
    	if(s[x+1][y]==c&&s[x+1][y+1]==c&&s[x][y+1]==c)
            return 1;
        if((s[x][y+1]==c&&s[x][y+2]==c&&s[x][y+3]==c)||(s[x+1][y]==c&&s[x+2][y]==c&&s[x+3][y]==c))
            return 2;
        if((s[x][y+1]==c&&s[x+1][y]==c&&s[x+1][y-1]==c)||(s[x+1][y]==c&&s[x+1][y+1]==c&&s[x+2][y+1]==c))
            return 3;
        if((s[x][y+1]==c&&s[x+1][y+1]==c&&s[x+1][y+2]==c)||(s[x+1][y]==c&&s[x+1][y-1]==c&&s[x+2][y-1]==c))
            return 4;
        else
            return 5;
    }
    int main()
    {
        cin>>n>>m;
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                cin>>s[i][j];
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(s[i][j]!='.')
                {
                    sum[check(i,j)]++;
                    remove(i,j);
                }
        for(i=1;i<=5;i++)
            cout<<sum[i]<<endl;
        return 0;
    }```
    • 1

    信息

    ID
    3392
    时间
    1000ms
    内存
    63MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者