Submission #1012105

#TimeUsernameProblemLanguageResultExecution timeMemory
1012105AmirAli_H1Last supper (IOI12_supper)C++17
100 / 100
45 ms12504 KiB
// In the name of Allah #include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef complex<ld> cld; #define all(x) (x).begin(),(x).end() #define len(x) ((ll) (x).size()) #define F first #define S second #define pb push_back #define sep ' ' #define endl '\n' #define Mp make_pair #define kill(x) cout << x << '\n', exit(0) #define set_dec(x) cout << fixed << setprecision(x); #define file_io(x,y) freopen(x, "r", stdin); freopen(y, "w", stdout); static int n, k, m; const static int maxn = 2e5 + 7; static int A[maxn], val[maxn], ind[maxn]; static int M[maxn], res[maxn]; static priority_queue<pii> qu; static int mark[maxn]; void WriteAdvice(unsigned char a); void ComputeAdvice(int C[], int Nx, int Kx, int Mx) { n = Nx; k = Kx; m = Mx; n += k; for (int i = 0; i < k; i++) A[i] = i; for (int i = k; i < n; i++) A[i] = C[i - k]; fill(ind, ind + n, n); for (int i = n - 1; i >= 0; i--) { val[i] = ind[A[i]]; ind[A[i]] = i; } fill(mark, mark + n, 0); while (!qu.empty()) qu.pop(); fill(M, M + n, -1); fill(res, res + n, 1); for (int i = 0; i < k; i++) { qu.push(Mp(val[i], i)); mark[i] = 1; M[A[i]] = i; } for (int i = k; i < n; i++) { while (!qu.empty()) { auto f = qu.top(); int r = f.S; if (mark[r]) break; else qu.pop(); } int j = M[A[i]]; if (j != -1) { mark[j] = 0; } else { auto f = qu.top(); qu.pop(); int r = f.S; mark[r] = 0; res[r] = 0; M[A[r]] = -1; } qu.push(Mp(val[i], i)); mark[i] = 1; M[A[i]] = i; } for (int i = 0; i < n; i++) { if (res[i]) WriteAdvice(1); else WriteAdvice(0); } }
// In the name of Allah #include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef complex<ld> cld; #define all(x) (x).begin(),(x).end() #define len(x) ((ll) (x).size()) #define F first #define S second #define pb push_back #define sep ' ' #define endl '\n' #define Mp make_pair #define kill(x) cout << x << '\n', exit(0) #define set_dec(x) cout << fixed << setprecision(x); #define file_io(x,y) freopen(x, "r", stdin); freopen(y, "w", stdout); static int n, k, m; const static int maxn = 2e5 + 7; static int A[maxn], M[maxn]; static vector<int> ls; static int mark[maxn]; void PutBack(int T); int GetRequest(); void Assist(unsigned char res[], int Nx, int Kx, int Rx) { n = Nx; k = Kx; m = Rx; n += k; fill(mark, mark + n, 0); ls.clear(); fill(M, M + n, -1); for (int i = 0; i < k; i++) { if (res[i] == 0) { ls.pb(i); mark[i] = 1; } A[i] = i; M[A[i]] = i; } for (int i = k; i < n; i++) { while (!ls.empty()) { int r = ls.back(); if (mark[r]) break; else ls.pop_back(); } A[i] = GetRequest(); if (M[A[i]] != -1) { int j = M[A[i]]; mark[j] = 0; M[A[i]] = -1; } else { int j = ls.back(); ls.pop_back(); mark[j] = 0; M[A[j]] = -1; PutBack(A[j]); } if (res[i] == 0) { ls.pb(i); mark[i] = 1; } M[A[i]] = i; } }
#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...