Submission #366522

#TimeUsernameProblemLanguageResultExecution timeMemory
366522kartelTenis (COCI20_tenis)C++14
0 / 110
1 ms364 KiB
#include <bits/stdc++.h> #define in(x) freopen(x, "r", stdin) #define out(x) freopen(x, "w", stdout) //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-O3") #define F first #define S second #define pb push_back #define M ll(1e9 + 7) #define sz(x) (int)x.size() #define re return #define oo ll(1e18) #define el '\n' #define pii pair <int, int> #define all(x) (x).begin(), (x).end() #define arr_all(x, n) (x + 1), (x + 1 + n) #define vi vector<int> #define eps (ld)1e-6 using namespace std; //using namespace __gnu_pbds; //typedef tree <pii, null_type, less_equal <pii> , rb_tree_tag, tree_order_statistics_node_update> ordered_set; typedef long long ll; typedef long double ld; typedef unsigned long long ull; typedef short int si; //ordered_set os; const int N = 1e5 + 500; ll ans[N]; ll cnt[4], ps[N][3], n; int a[3][N]; int main() { // srand(time(0)); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // in("turtle.in"); // out("turtle.out"); // inf("input.txt"); // out("output.txt"); cin >> n; for (int i = 0; i < 3; i++) { // for (int j = 1; j <= n; j++) // a[i][j] = j; // random_shuffle(a[i] + 1, a[i] + 1 + n); for (int j = 1; j <= n; j++) { cin >> a[i][j]; ps[a[i][j]][i] = j; } } // for (int j = 0; j < 3; j++, cout << el) // for (int i = 1; i <= n; i++) // cout << a[j][i] << " "; // if (n > 3000) { map <int, int> mp; for (int i = 1; i < n; i++) { bool bad = 0; if (mp.find(a[0][i]) != mp.end()) bad = 1; if (!bad) { cnt[0] += n - mp.size() - 1; for (int j = 1; j <= 2; j++) { if (a[j][i] != a[0][i] && !mp[a[j][i]]) { if (ps[a[0][i]][j] < ps[a[j][i]][0]) cnt[0]--; } } } for (int j = 0; j < 3; j++) mp[a[j][i]] = 1; } mp.clear(); for (int i = 1; i < n; i++) { bool bad = 0; if (mp.find(a[1][i]) != mp.end()) { bad = 1; } if (!bad) { cnt[1] += n - mp.size() - 1; for (int j = 0; j < 3; j++) { if (j == 1) continue; if (a[j][i] != a[1][i] && !mp[a[j][i]]) { if (ps[a[1][i]][j] < ps[a[j][i]][1]) cnt[1]--; } } } for (int j = 0; j < 3; j++) mp[a[j][i]] = 1; } for (int i = 0; i < 2; i++) cout << cnt[i] << " "; cout << n * 1ll * (n - 1) / 2ll - cnt[0] - cnt[1] << el; // for (int i = 0; i < n; i++) // cout << "0 "; return 0; // } for (int i = 0; i < 3; i++) cnt[i] = 0; for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) { ll mn = 1e9; for (int k = 0; k < 3; k++) mn = min(mn, min(ps[i][k], ps[j][k])); int cnt1 = 0, last; for (int k = 0; k < 3; k++) { if (ps[i][k] == mn || ps[j][k] == mn) cnt1++, last = k; } if (cnt1 == 1) { cnt[last]++; ans[i] += (ps[i][last] < ps[j][last]); ans[j] += (ps[j][last] < ps[i][last]); continue; } ll mn1 = 1e9; for (int k = 0; k < 3; k++) { if (ps[i][k] == mn && ps[i][k] < ps[j][k]) mn1 = min(mn1, ps[j][k]); else if (ps[j][k] == mn && ps[j][k] < ps[i][k]) mn1 = min(mn1, ps[i][k]); } for (int k = 0; k < 3; k++) { if (ps[i][k] == mn && ps[i][k] < ps[j][k]) { if (ps[j][k] == mn1) { cnt[k]++; ans[i]++; break; } } else if (ps[j][k] == mn && ps[j][k] < ps[i][k]) { if (ps[i][k] == mn1) { cnt[k]++; ans[j]++; break; } } } } for (int i = 0; i < 3; i++) cout << cnt[i] << " "; cout << el; for (int i = 1; i <= n; i++) { cout << ans[i] << " "; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...