Cod sursă (job #143338)

Utilizator avatar spatarel Spatarel Dan-Constantin spatarel IP ascuns
Problemă Switch5 (lot liceu) Compilator cpp | 1,95 kb
Rundă Status evaluat
Dată 18 apr. 2015 01:47:41 Scor ascuns
#include <cstdio>
#include <bitset>
#define VER 0
#define N 1005
using namespace std;
bitset<N> b[N][N],z,E[N],A;
int n,i,j,e,s[N][N],ec[N];
void verifica();
int main()
{
    if(VER){verifica();return 0;}

    freopen("switch5.in","r",stdin);
    freopen("switch5.out","w",stdout);
    scanf("%d",&n);
    z[0]=1;
    for(i=1;i<=n;i++)
        b[1][i][i]=1;
    for(i=2;i<=n;i++)
        for(j=1;j<=n;j++)
            b[i][j]=b[i-1][j-1]^b[i-1][j]^b[i-1][j+1]^b[i-2][j]^z;
    for(j=1;j<=n;j++)
        E[j]=b[n][j-1]^b[n][j]^b[n][j+1]^b[n-1][j]^z;
    for(e=1,j=1;j<=n;j++)
    {
        for(i=e;i<=n;i++)
            if(E[i][j]==1)break;
        if(i==n+1)continue;
        A=E[j];E[j]=E[i];E[i]=A;
        for(i=1;i<=n;i++)
            if(i-e)
                if(E[i][j]==1)
                    E[i]^=E[e];
        ec[j]=e++;

    }
    for(j=1;j<=n;j++)
    {
        if(ec[j])
            s[1][j]=E[ec[j]][0];
        printf("%d",s[1][j]);
    }
    printf("\n");
    for(i=2;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            s[i][j]=s[i-2][j]^s[i-1][j-1]^s[i-1][j]^s[i-1][j+1]^1;
            printf("%d",s[i][j]);

        }
        printf("\n");
    }

    return 0;
}
void verifica()
{
    freopen("switch5.in","r",stdin);
        scanf("%d",&n);
        fclose(stdin);
        freopen("switch5.out","r",stdin);
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                scanf("%1d",&e);
                if(e)
                {
                    s[i][j]^=1;
                    s[i-1][j]^=1;
                    s[i+1][j]^=1;
                    s[i][j-1]^=1;
                    s[i][j+1]^=1;
                }
            }
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                if(!s[i][j])
                {
                    printf("NU E BINE\n");
                    return;
                }
        printf("PERFECT\n");
        return;
}