Submission #1276261

#TimeUsernameProblemLanguageResultExecution timeMemory
1276261codefoxSateliti (COCI20_satellti)C++20
0 / 110
328 ms589824 KiB
#include<bits/stdc++.h>
  
#ifndef ONLINE_JUDGE
#define input freopen("../input.txt", "r", stdin)
#define output freopen("../output.txt", "w", stdout)
#else
#define input if(0) cout << 0
#define output if(0) cout << 0
#endif

#pragma GCC optimize("Ofast")

using namespace std;
    
#define int long long
#define pii pair<int, int>

const int mod = 1e9+7;

const int N = 10;

int32_t main()
{
    input;
    output;

    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, m;
    cin >> n >> m;
    vector<string> grid(n);
    for (int i = 0; i < n; i++) cin >> grid[i];

    int order[n][m] = {0};
    pii sorted[n*m];
    int cum[n*m] = {0};

    int k = 0;
    for (int i = 0 ;i < n; i++)
    {
        for (int j = 0; j < m; j++) 
            if (grid[i][j]=='*') 
            {
                sorted[k] = {i, j};
                order[i][j] = 0;
                cum[1]++;
                k++;
            }
    }
    for (int i = 0 ;i < n; i++)
    {
        for (int j = 0; j < m; j++) 
            if (grid[i][j]=='.') 
            {
                sorted[k] = {i, j};
                order[i][j] = 1;
                k++;
            }
    }

    for (int i = 0; i < N; i++)
    {
        pii nsorted[n*m];
        for (auto ele:sorted)
        {
            auto [a, b] = ele;
            int o = order[a][((b-(1<<i))%m+m)%m];
            nsorted[cum[o]] = {a, ((b-(1<<i))%m+m)%m}; 
            cum[o]++;
        }  
        int norder[n][m];
        int t = -1;
        pii last = {-1, -1};
        for (int j = 0; j < n*m; j++)
        {
            auto [a, b] = nsorted[j];
            int o1 = order[a][b];
            int o2 = order[a][((b-(1<<i))%m+m)%m];
            if (make_pair(o1, o2)!=last) t++;
            last = {o1, o2};
            norder[a][b] = t;
            cum[j] = 0;
        }
        for (int j = 0; j < n*m; j++)
        {
            auto [a, b] = nsorted[j];
            order[a][b] = norder[a][b];
            if (order[a][b]==n*m-1) break;
            cum[order[a][b]+1]++;
        }
        for (int j = 1; j < n*m; j++)
        {
            cum[j] += cum[j-1];
        }
    }

    
    for (int i = 0; i < N; i++)
    {
        pii nsorted[n*m];
        for (auto ele:sorted)
        {
            auto [a, b] = ele;
            int o = order[((a-(1<<i))%n+n)%n][b];
            nsorted[cum[o]] = {((a-(1<<i))%n+n)%n,b}; 
            cum[o]++;
        }  
        int norder[n][m];
        int t = -1;
        pii last = {-1, -1};
        for (int j = 0; j < n*m; j++)
        {
            auto [a, b] = nsorted[j];
            int o1 = order[a][b];
            int o2 = order[((a-(1<<i))%n+n)%n][b];
            if (make_pair(o1, o2)!=last) t++;
            last = {o1, o2};
            norder[a][b] = t;
            cum[j] = 0;
        }
        for (int j = 0; j < n*m; j++)
        {
            sorted[j] = nsorted[j];
            auto [a, b] = nsorted[j];
            order[a][b] = norder[a][b];
            if (order[a][b]==n*m-1) break;
            cum[order[a][b]+1]++;
        }
        for (int j = 1; j < n*m; j++)
        {
            cum[j] += cum[j-1];
        }
    }

    auto [a, b] = sorted[0];

    for (int i = a; i < n+a; i++)
    {
        cout << grid[i%n].substr(b, m-b) << grid[i%n].substr(0, b) << "\n";
    }

    return 0;
}

Compilation message (stderr)

Main.cpp: In function 'int32_t main()':
Main.cpp:4:22: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    4 | #define input freopen("../input.txt", "r", stdin)
      |               ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:24:5: note: in expansion of macro 'input'
   24 |     input;
      |     ^~~~~
Main.cpp:5:23: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define output freopen("../output.txt", "w", stdout)
      |                ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:25:5: note: in expansion of macro 'output'
   25 |     output;
      |     ^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...