# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
316131 | georgerapeanu | Tenis (COCI20_tenis) | C++11 | 1 ms | 384 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100005;
int n;
int ran[3][NMAX + 5];
int pos[3][NMAX + 5];
long long ans[3];
int appeared[NMAX + 5];
int fr[1 << 3];
int wh[NMAX + 5];
int wins[NMAX + 5];
int get_best(int a,int b){
pair<pair<int,int>,int> bst = {{1e9,1e9},1e9};
for(int h = 0;h < 3;h++){
pair<pair<int,int>,int> tmp = {{min(pos[h][a],pos[h][b]),max(pos[h][a],pos[h][b])},h};
bst = min(bst,tmp);
}
return bst.second;
}
int get_winner(int a,int b){
pair<pair<int,int>,int> bst = {{1e9,1e9},1e9};
for(int h = 0;h < 3;h++){
pair<pair<int,int>,int> tmp = {{min(pos[h][a],pos[h][b]),max(pos[h][a],pos[h][b])},h};
bst = min(bst,tmp);
}
return ran[bst.second][bst.first.first];
}
int bonus[NMAX + 5];
int main(){
scanf("%d",&n);
for(int h = 0;h <= 2;h++){
for(int i = 1;i <= n;i++){
scanf("%d",&ran[h][i]);
pos[h][ran[h][i]] = i;
}
}
for(int i = 1;i <= n;i++){
vector<int> noi;
for(int h = 0;h <= 2;h++){
if(wh[ran[h][i]] == 0 || wh[ran[h][i]] == i){
if(wh[ran[h][i]] == 0){
noi.push_back(ran[h][i]);
wh[ran[h][i]] = i;
}
appeared[ran[h][i]] |= 1 << h;
}
}
for(auto it:noi){
for(int conf = 0;conf < (1 << 3);conf++){
int tmp = conf & appeared[it];
int lowest_common_bit = 0;
for(int i = 0;i < 3;i++){
if((conf >> i) & 1){
lowest_common_bit = i;
break;
}
}
ans[lowest_common_bit] += fr[conf];
}
}
for(auto it:noi){
fr[appeared[it]]++;
}
for(int i = 0;i < (int)noi.size();i++){
for(int j = i + 1;j < (int)noi.size();j++){
ans[get_best(noi[i],noi[j])]++;
wins[get_winner(noi[i],noi[j])]++;
}
}
bonus[i - 1] += (int)noi.size();
}
for(int i = n;i >= 0;i--){
bonus[i] += bonus[i + 1];
}
for(int i = 1;i <= n;i++){
wins[i] += bonus[wh[i]];
}
for(int i = 0;i < 3;i++)printf("%lld ",ans[i]);printf("\n");
for(int i = 1;i <= n;i++)printf("%d ",0 * wins[i]);printf("\n");
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |