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>
#define all(v) ((v).begin(),(v).end())
#define ll long long
#define F first
#define S second
const ll mod = 1e9 + 7;
const ll mxN = 1e5 + 2;
using namespace std;
// void __attribute__((noreturn)) __attribute__((format(printf, 1, 2))) result(const char *msg, ...) {
// va_list args;
// va_start(args, msg);
// vfprintf(stdout, msg, args);
// fprintf(stdout, "\n");
// va_end(args);
// exit(0);
// }
//
// namespace {
// int N;
// int Q = 0;
// const int MAX_Q = 4000;
// const int MAX_N = 4000;
// vector<int> solution;
// } // namespace
//
//
// void __attribute__((noreturn)) answer(vector<int> R) {
// printf("answer({");
// for(int i = 0; i < int(R.size()); ++i) {
// if(i == 0)
// printf("%d", R[i]);
// else
// printf(", %d", R[i]);
// }
// printf("})\n");
// fflush(stdout);
//
//
// if(R == solution)
// result("Correct: %d published ranking(s).", Q);
// else
// result("Wrong answer!");
// }
int publish(vector<int> R);
// printf("publish({");
// for(int i = 0; i < int(R.size()); ++i) {
// if(i == 0)
// printf("%d", R[i]);
// else
// printf(", %d", R[i]);
// }
// printf("})\n");
// fflush(stdout);
//
// if (++Q > MAX_Q)
// result("Too many published rankings!");
//
// if (int(R.size()) != N)
// result("Invalid published ranking!");
//
// set<int> chosen;
// for(auto &x : R) {
// if(x < 1 || x > N || chosen.count(x))
// result("Invalid published ranking!");
// chosen.insert(x);
// }
// vector<int> positions(N+1);
// for(int i = 0; i < N; ++i)
// positions[R[i]] = i;
//
// int complaints = 0;
// for(int i = 0; i < N; ++i) {
// for(int j = i+1; j < N; ++j) {
// if(positions[solution[i]] > positions[solution[j]])
// ++complaints;
// }
// }
//
// return complaints;
// }
void answer(std::vector<int>);
struct number{
int val;
vector<int>v;
};
number A[mxN],B[mxN];
vector<int>ans;
void calc(int i,int N){
int x = A[i].val,y = B[i].val;
int c = (x + y - (N - 1))/2;
x -= c;
y -= c;
ans[x] = i;
}
void cont(int i,int j,int N){
if(i > j) return;
if(i == j){
calc(i,N);
return;
}
vector<int>b = A[i].v;
vector<int>a = {j};
for(auto x : B[j].v){
a.push_back(x);
}
b.push_back(i);
int x = publish(b),y = publish(a);
vector<int>temp;
for(auto x : b){
if(x != i + 1) temp.push_back(x);
}
a.pop_back();
B[i].val = x;
A[j].val = y;
A[i + 1].val = x;
A[i + 1].v = temp;
B[j - 1].val = y;
B[j - 1].v = a;
calc(i,N);calc(j,N);
cont(i + 1,j - 1,N);
}
void solve(int N) {
ans.resize(N);
for(int i = 1;i <= N;i++){
A[i].val = -1;
B[i].val = -1;
}
vector<int>a = {1},b;
for(auto j = 1;j <= N;j++){
if(j != 1) {
a.push_back(j);
b.push_back(j);
}
}
b.push_back(1);
int x = publish(a),y = publish(b);
a.pop_back();
vector<int>temp;
for(auto x : b){
if(x != 2) temp.push_back(x);
}
B[N].val = x;
B[N].v = a;
A[2].val = y;
A[2].v = temp;
A[1].val = x;
B[1].val = y;
calc(1,N);
cont(2,N,N);
answer(ans);
}
//
// int main() {
// if (scanf("%d", &N) != 1 || N < 2 || N > MAX_N)
// result("Invalid input!");
//
// solution.resize(N);
// set<int> chosen;
// for(auto &x : solution) {
// if(scanf("%d", &x) != 1 || x < 1 || x > N || chosen.count(x))
// result("Invalid input!");
// chosen.insert(x);
// }
//
// solve(N);
//
// result("No answer!");
// }
Compilation message (stderr)
interface.cpp: In function 'int publish(std::vector<int>)':
interface.cpp:20:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
20 | if(v.size() != N) {
| ~~~~~~~~~^~~~
interface.cpp: In function 'void answer(std::vector<int>)':
interface.cpp:36:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
36 | if(v.size() != N) {
| ~~~~~~~~~^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |