Cod sursa(job #2970386)

Utilizator user12345user user user user12345 Data 24 ianuarie 2023 23:25:15
Problema Matrix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.92 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("matrix.in");
ofstream fout("matrix.out");

char a[1001][1001];
bitset <10> line[1001][1001][26], col[1001][1001][26];
int n, X1, Y1, X2, Y2, r[26], f[26];
bitset <26> ok;

int main()
{
    ok.set();
    int aux;
    fin >> n >> aux;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            for (short k = 0; k < 26; k++)
                line[i][j][k] = line[i][j - 1][k];

            fin >> a[i][j];
            line[i][j][a[i][j] - 'a'] = line[i][j][a[i][j] - 'a'].to_ulong() + 1;
        }

    return 0;

    for (int i = 1; i <= aux; i++)
        for (int j = 1; j <= aux; j++)
        {
            char c;
            fin >> c;
            r[c - 'a']++;
        }

    int dir; 
    /*
        0 - Up
        1 - Right
        2 - Down
        3 - Left
    */

    dir = 2;
    X1 = Y1 = 1;
    X2 = Y2 = aux;

    for (int i = 1; i <= aux; i++)
        for (int j = 1; j <= aux; j++)
            ok[a[i][j] - 'a'] = ((++f[a[i][j] - 'a']) == r[a[i][j] - 'a']);

    int cnt = 0, i, j;

    while (true)
    {
        cnt += ok.all();

        if (dir == 0)
        {
            if (X1 == 1)
            {
                if (Y2 == n)
                    break;

                for (i = X1; i <= X2; i++)
                    ok[a[i][Y1] - 'a'] = ((--f[a[i][Y1] - 'a']) == r[a[i][Y1] - 'a']);
                Y1++;

                Y2++;
                for (i = X1; i <= X2; i++)
                    ok[a[i][Y2] - 'a'] = ((++f[a[i][Y2] - 'a']) == r[a[i][Y2] - 'a']);

                dir = 2;
            }
            else
            {
                for (j = Y1; j <= Y2; j++)
                    ok[a[X2][j] - 'a'] = ((--f[a[X2][j] - 'a']) == r[a[X2][j] - 'a']);
                X2--;

                X1--;
                for (j = Y1; j <= Y2; j++)
                    ok[a[X1][j] - 'a'] = ((++f[a[X1][j] - 'a']) == r[a[X1][j] - 'a']);
            }
        }
        else // dir == 2
        {
            if (X2 == n)
            {
                if (Y2 == n)
                    break;
                
                for (i = X1; i <= X2; i++)
                    ok[a[i][Y1] - 'a'] = ((--f[a[i][Y1] - 'a']) == r[a[i][Y1] - 'a']);
                Y1++;

                Y2++;
                for (i = X1; i <= X2; i++)
                    ok[a[i][Y2] - 'a'] = ((++f[a[i][Y2] - 'a']) == r[a[i][Y2] - 'a']);

                dir = 0;
            }
            else
            {
                for (j = Y1; j <= Y2; j++)
                    ok[a[X1][j] - 'a'] = ((--f[a[X1][j] - 'a']) == r[a[X1][j] - 'a']);
                X1++;

                X2++;
                for (int j = Y1; j <= Y2; j++)
                    ok[a[X2][j] - 'a'] = ((++f[a[X2][j] - 'a']) == r[a[X2][j] - 'a']);
            }
        }
    }

    fout << cnt;

    return 0;
}