64分蒟蒻求助

P1162 填涂颜色

云深时见d码 @ 2020-11-29 19:56:34

#include<bits/stdc++.h> 
using namespace std;
bool vis;
int b[100][100];
int main()
{
    int n,ex=0,ey=0;
    cin>>n;
    int a[100][100];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    }       
    for(int i=1;i<=n;i++)
    {
        if(a[i][n]==0)
        {
            for(int j=n;j>=0;j--)
            {
                if(a[i][j]==0) b[i][j]=2;
                else if(a[i][j]==1) break;
            }
        }

    }
    for(int i=1;i<=n;i++)
    {
        if(a[i][1]==0)
        {
            for(int j=1;j<=n;j--)
            {
                if(a[i][j]==0) b[i][j]=2;
                if(a[i][j]==1) break;
            }
        }

    }
    for(int i=1;i<=n;i++)
    { 
        vis=0;
        for(int j=1;j<=n;j++)
        {
            if(a[j][i]==1) vis=1;
            else if(vis==1&&a[j][i]==0&&b[j][i]!=2) b[j][i]=1;
            else if(vis==1&&a[j][i]==1) vis=0;
            int bb=j;
            while(bb<n+1)
            {
                if(vis==1&&a[bb][i]==1) break;
                if(bb==n&&vis==1)   
                {
                    for(int i1=1;i1<=n;i1++)
                    {
                        for(int j1=1;j1<n;j1++)
                        b[i1][j1]=0;
                    }
                }  
                bb++;

            }

            for(int maxn=1;maxn<=n;maxn++)
            {
                for(int minn=1;minn<=n;minn++)
                {
                    if(b[minn][maxn]==1)
                    a[minn][maxn]=2;
                }
            }
        } 

    } 
    cout<<endl;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }   
    return 0;
}

我加了筛多余0的筛子但是一会筛一会不筛


by 云深时见d码 @ 2020-12-02 21:35:40

蒟蒻的得分升到80了

#include<bits/stdc++.h> 
using namespace std;
bool vis;
int b[100][100];
int main()
{
    int n,ex=0,ey=0;
    cin>>n;
    int a[100][100];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    }       
    for(int i=1;i<=n;i++)
    {
            for(int j=n;j>=0;j--)
            {
                if(a[i][j]==1) break;
                b[i][j]=2;
            }   
    }
    for(int i=1;i<=n;i++)
    {
            for(int j=1;j<=n;j--)
            {   
                if(a[i][j]==1) break;
                b[i][j]=2;
            }   
    }
    for(int i=1;i<=n;i++)
    { 
        vis=0;
        for(int j=1;j<=n;j++)
        {
            if(a[j][i]==1) vis=1;
            else if(vis==1&&a[j][i]==0&&b[j][i]!=2) b[j][i]=1;
            else if(vis==1&&a[j][i]==1) vis=0;
            int bb=j;
            while(bb<n+1)
            {
                if(vis==1&&a[bb][i]==1) break;
                if(bb==n&&vis==1)   
                {
                    for(int i1=1;i1<=n;i1++)
                    {
                        for(int j1=1;j1<n;j1++)
                        {
                            if(b[i1][j1]!=2)
                            b[i1][j1]=0;
                        }       
                    }
                }  
                bb++;

            }

            for(int maxn=1;maxn<=n;maxn++)
            {
                for(int minn=1;minn<=n;minn++)
                {
                    if(b[minn][maxn]==1)
                    a[minn][maxn]=2;
                }
            }
        } 
    } 
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }   
    return 0;
}

|