Submission #1334044

#TimeUsernameProblemLanguageResultExecution timeMemory
1334044HisuThumper (NOI25_thumper)C++20
0 / 100
1 ms580 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define ed "\n"
#define int long long

const int N = 2e5 + 5;
int n, m, r[N], c[N], t[N];

namespace subtask1 {
    bool check() {
        return n <= 2000 && m <= 2000;
    }

    void solve() {
        for(int j = 1; j <= m; j++) {
            for(int i = 1; i <= n; i++) if(i != t[j]) {
                int x = abs(r[i] - r[t[j]]),
                    y = abs(c[i] - c[t[j]]);
                int xDir = (r[i] > r[t[j]] ? 1 : -1),
                    yDir = (c[i] > c[t[j]] ? 1 : -1);
                
                if(x < y) c[i] += 2 * yDir;
                else if(x > y) r[i] += 2 * xDir;
                else {
                    r[i] += 1 * xDir;
                    c[i] += 1 * yDir;
                }
            }
        }

        for(int i = 1; i <= n; i++) cout << r[i] << " " << c[i] << ed;
    }
}

namespace subtask2 {
    bool check() {
        for(int i = 1; i <= n; i++) if(r[i] != 1) return false;
        return true;
    }

    void solve() {
        vector<pair<int, int>> rabbits;
        for(int i = 1; i <= n; i++) rabbits.emplace_back(c[i], i);
        sort(rabbits.begin(), rabbits.end());
        vector<int> pos(n + 2, 0);
        for(int i = 1; i <= n; i++) pos[rabbits[i - 1].second] = i;
        
        vector<int> pre(n + 2, 0);
        for(int j = 1; j <= m; j++) {
            pre[1] -= 2;
            pre[pos[t[j]]] += 2;

            pre[t[j] + 1] += 2;
        }

        for(int i = 1; i <= n; i++) pre[i] += pre[i - 1];

        vector<int> ans(n + 2, 0);
        for(int i = 1; i <= n; i++) {
            int idx = rabbits[i - 1].second;
            // cout << r[idx] << " " << c[idx] + pre[i] << ed;

            ans[idx] = c[idx] + pre[i];
        }

        for(int i = 1; i <= n; i++) cout << 1 << " " << ans[i] << ed;
    }
}

void solve(int iTest) {
    cin >> n >> m;
    for(int i = 1; i <= n; i++) cin >> r[i] >> c[i];
    for(int i = 1; i <= m; i++) cin >> t[i];

    if(subtask2::check()) subtask2::solve();
}

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

    #define TASK "main"
    if(fopen(TASK ".inp", "r")) {
        freopen(TASK ".inp", "r", stdin);
        freopen(TASK ".out", "w", stdout);
    }
    else if(fopen("main.inp", "r")) {
        freopen("main.inp", "r", stdin);
        freopen("main.out", "w", stdout);
    }

    int T = 1;
    // cin >> T;
    for(int iTest = 1; iTest <= T; iTest++) {
        solve(iTest);
    }
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:86:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   86 |         freopen(TASK ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:87:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   87 |         freopen(TASK ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |         freopen("main.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |         freopen("main.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...