답안 #1052419

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1052419 2024-08-10T14:25:27 Z qrn Circle Passing (EGOI24_circlepassing) C++14
0 / 100
2000 ms 728124 KB

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ep emplace_back
#define ins insert
#define fi first
#define er erase
#define se second
template<class ISqr, class T>
ISqr& operator>>(ISqr& is, vector<T>& v) { for (auto& x : v) is >> x; return is; }
#define give(v)        \
    cout << v << endl; \
    return;
#define print(a)          \
    for (auto v : a)      \
    {                     \
        cout << v << " "; \
    }                     \
    cout << endl;
#define vs vector<string>
#define vi vector<int>
#define vb vector<bool>
#define pii pair<int, int>
#define vvi vector<vector<int>>
#define sz(x) x.size()
#define vpi vector<pair<int, int>>
#define SPEED                     \
    ios_base::sync_with_stdio(0); \
    cin.tie(NULL);                \
    cout.tie(NULL);
#define ALL(x) x.begin(), x.end()
#define endl "\n"
#define yes cout << "YES" << endl;
#define no cout << "NO" << endl;
#define out cout << endl;
#define impos cout << -1 << endl;
#define int long long
const long double pi = 2 * acosl(0);
const int inf = 1e9;
const int mod = 1e9 + 7;
const int sz = 200001;

void solve(){
    int n, m, q;
    cin >> n >> m >> q;
    map<int,int>f;
    for(int i = 0; i <= 2*n-1; i++) f[i] = -1;
    for(int i = 0; i < m; i++) {
        int x; cin >> x; 
        f[x] = x + n;
        f[x+n] = x;
    }
    while(q--){
        int a, b;
        cin >> a >> b;
        if(a > b) swap(a,b);
        if(f[a] == b) {
            cout << 1 << endl;
            continue;
        }
        int dis1 = min(abs(b-a), ((2*n-1)-b+a+1));
        bool is = false;
        if(n % 2 != 0) {
            is = true;
        }
        if(dis1 > n/2 + is){
            int r = (a + n/2) % (2*n);
            int l = a - n/2;
            if(l < 0) {
                int sub = n/2;
                sub -= a;
                l = (2*n-sub);
            }
            if(l > r) swap(l, r);
            int dis = inf;
            int move = 0;
            if(max(l,r) > a && min(l,r) > a) {
                // 0 var
                // cout << "ZOR" << endl;
                for(int i = min(l,r); i > a; i--) {
                    // cout << i << " " << min(abs(i-a), ((2*n-1)-i+a+1)) << endl;
                    if(dis > min(abs(i-a), ((2*n-1)-i+a+1)) && f[i] != -1){
                            dis = min(abs(i-a), ((2*n-1)-i+a+1));
                            move = i;
                    }
                } 
                // cout << "ENENENEN" << endl;
                int dudus = 0;
                for(int i = max(l,r); i <= 2*n-1; i++) {
                    // cout << i << " " << min(abs(i-a), ((2*n-1)-i+a+1)) << endl;
                    if(dis > min(abs(i-a), ((2*n-1)-i+a+1)) && f[i] != -1){
                            dis = min(abs(i-a), ((2*n-1)-i+a+1));
                            move = i;
                    }
                }
                // cout << "ENENENEN" << endl;
                for(int i = 0; i < a; i++) {
                    // cout << i << " " << min(abs(i-a), ((2*n-1)-i+a+1)) << endl;
                    if(dis > min(abs(i-a), ((2*n-1)-i+a+1)) && f[i] != -1){
                            dis = min(abs(i-a), ((2*n-1)-i+a+1));
                            move = i;
                    }
                }
            } else {
                for(int i = l; i <= r; i++) {
                    if(dis > min(abs(i-a), ((2*n-1)-i+a+1)) && f[i] != -1){
                            dis = min(abs(i-a), ((2*n-1)-i+a+1));
                            move = i;
                    }
                }
            }
            // cout << "move: " << move << endl;
            // cout << "Dis1: " << dis1 << endl;
            // cout << "Dismove: " << dis << endl;
            // cout << "L AND R: " << l << " " << r << endl;
            if(dis == inf){
                if(f[a]){
                    int ans = 0;
                    ans++;
                    ans +=  min(abs((a+n)-b), ((2*n-1)-(a+n)+b+1));
                    cout << min(dis1, ans) << endl;
                } else{
                    cout << dis1 << endl;
                }
            }
            else{
                bool is = true;
                if(f[move] == b) is = false;
                int diss = min(abs(b-f[move]), ((2*n-1)-b+f[move]+1));
                cout << min(dis1, dis+1+diss) << endl;
            }
        } else {
            cout << dis1 << endl;
        }
        cout << endl << endl;
    }

}

signed main() {
//     freopen("input.txt","r",stdin);
//     freopen("output.txt","w",stdout);
    SPEED;
    int tst = 1;
    // cin >> tst;
    for (int cs = 1; cs <= tst; cs++) {
        solve();
    }
    // cerr << "Time Elapsed: " << (long double)clock() << endl;
}

Compilation message

Main.cpp: In function 'void solve()':
Main.cpp:90:21: warning: unused variable 'dudus' [-Wunused-variable]
   90 |                 int dudus = 0;
      |                     ^~~~~
Main.cpp:129:22: warning: variable 'is' set but not used [-Wunused-but-set-variable]
  129 |                 bool is = true;
      |                      ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 604 KB Output is correct
2 Correct 3 ms 616 KB Output is correct
3 Correct 13 ms 648 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Execution timed out 2095 ms 12980 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Incorrect 0 ms 348 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Incorrect 0 ms 348 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2071 ms 728124 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 604 KB Output is correct
2 Correct 3 ms 616 KB Output is correct
3 Correct 13 ms 648 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Execution timed out 2095 ms 12980 KB Time limit exceeded
6 Halted 0 ms 0 KB -