Submission #744684

# Submission time Handle Problem Language Result Execution time Memory
744684 2023-05-19T01:05:19 Z oolimry Archery (IOI09_archery) C++17
46 / 100
2000 ms 34672 KB
#include <bits/stdc++.h>
using namespace std;
#define sz(x) (int) (x).size()
#define all(x) (x).begin(), (x).end()
#define show(x) cerr << #x << " is " << x << endl;
#define show2(x,y) cerr << #x << " is " << x << " " << #y << " is " << y << endl;
#define show3(x,y,z) cerr << #x << " is " << x << " " << #y << " is " << y << " " << #z << " is " << z << endl;
typedef long long lint;
typedef pair<lint,lint> ii;


int arr[400005];
int target[400005];
int n, R; 
int me;

inline int bruhmod(int x){
	int res = x%n;
	if(res <= 0) res += n;
	return res;
}

///for strong
vector<int> candidates[600005];

inline int solve(int s){
	//return debuggingstuff[s];
	target[me] = s;
	for(int i = 1;i <= 2*n;i++){
		int newi = i + (i >= 2*s);
		target[arr[i]] = (newi+1)/2;
	}
	
	//for(int i = 1;i <= 2*n;i++) show2(i, target[i]);
	
	if(me >= n+2){ ///weak
		set<int> available;
		for(int i = 2;i <= n;i++) available.insert(i);
		
		for(int i = 2*n;i >= me;i--){
			auto it = available.upper_bound(target[i]);
			
			bool looparound = false;
			
			if(it == available.begin()){
				it = --available.end();
				looparound = true;
			}
			else it--;
						
			if(i == me) return *it - (looparound * n);
			available.erase(it);
		}
	}
	else{ ///strong
		assert(false);
		for(int i = 1;i <= 3*n;i++) candidates[i].clear();
		
		for(int i = 1;i <= 2*n;i++){
			candidates[target[i]].push_back(i);
		}
		
		if(candidates[1][0] < candidates[1][1]) swap(candidates[1][0], candidates[1][1]);
		int winner = candidates[1][1]; candidates[1].pop_back();
		
		int looparounds = 0;
		
		priority_queue<int, vector<int>, greater<int> > choices;
		for(int turn = 1;turn <= 3*n+1;turn++){
			for(int x : candidates[turn]) choices.push(x);
			
			int t = choices.top(); choices.pop();
			
			if(turn > n and t == me){
				int turnsleft = R-turn+1;
				
				looparounds += (turnsleft + n - 1) / n;
				
				turnsleft %= n;
								
				int res = (1-turnsleft+n) % n;
				if(res == 0) res = n;
				return res -  n * looparounds;
			}
			
			if(t < winner) swap(t, winner);
			if(t == me) looparounds++;
			
			candidates[turn+n].push_back(t);
		}
	}
}

inline int bsta(int x){ ///find last position <= x
	int low = 0, high = n+1;
		
	while(low < high-1){
		int mid = (low+high)/2;
		
		if(solve(mid) <= x) low = mid;
		else high = mid;
	}
	
	return low;
}

int bestPos = -1;
int bestVal = 1;
inline void consider(int pos){
	int val = solve(pos);
	int valmod = bruhmod(val); 
		
	if(valmod < bestVal){
		bestVal = valmod;
		bestPos = pos;
	}
	if(valmod == bestVal and bestPos < pos){
		bestVal = valmod;
		bestPos = pos;
	}
}

signed main(){
	//freopen("i.txt","r",stdin);
	ios_base::sync_with_stdio(false); cin.tie(0);
	
	cin >> n >> R;
	cin >> me;
	
	//for(int i = 1;i <= n;i++) cin >> debuggingstuff[i];
	
	if(me == 1){
		cout << n;
		return 0;
	}
	
	for(int i = 1;i <= 2*n-1;i++) cin >> arr[i];	
	
	bestVal = n+1;
	int small = solve(1);
	consider(1); consider(n);
	
	int pos = bsta(small);
	consider(pos);
	
	small += (n - bruhmod(small));
	
	for(int x = 0;x < 1;x++){
		int pos = bsta(small);
		if(pos >= n) break;
		
		pos++;
		int val = solve(pos);
		pos = bsta(val);
		consider(pos);
		
		small += n;
	}
	
	cout << bestPos;
}

Compilation message

archery.cpp: In function 'int solve(int)':
archery.cpp:92:1: warning: control reaches end of non-void function [-Wreturn-type]
   92 | }
      | ^
# Verdict Execution time Memory Grader output
1 Correct 9 ms 14420 KB Output is correct
2 Correct 8 ms 14420 KB Output is correct
3 Runtime error 23 ms 29044 KB Execution killed with signal 6
4 Runtime error 23 ms 29140 KB Execution killed with signal 6
5 Correct 9 ms 14400 KB Output is correct
6 Correct 9 ms 14420 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 22 ms 29080 KB Execution killed with signal 6
2 Runtime error 21 ms 29012 KB Execution killed with signal 6
3 Runtime error 20 ms 29112 KB Execution killed with signal 6
4 Runtime error 23 ms 29548 KB Execution killed with signal 6
5 Runtime error 50 ms 34380 KB Execution killed with signal 6
6 Runtime error 20 ms 29012 KB Execution killed with signal 6
7 Runtime error 20 ms 29108 KB Execution killed with signal 6
8 Runtime error 23 ms 29572 KB Execution killed with signal 6
9 Runtime error 25 ms 29744 KB Execution killed with signal 6
10 Runtime error 23 ms 29132 KB Execution killed with signal 6
11 Runtime error 23 ms 29688 KB Execution killed with signal 6
12 Runtime error 21 ms 29140 KB Execution killed with signal 6
13 Runtime error 42 ms 32968 KB Execution killed with signal 6
14 Runtime error 21 ms 29132 KB Execution killed with signal 6
15 Runtime error 25 ms 30084 KB Execution killed with signal 6
16 Runtime error 20 ms 29024 KB Execution killed with signal 6
17 Runtime error 20 ms 29092 KB Execution killed with signal 6
18 Runtime error 20 ms 29092 KB Execution killed with signal 6
19 Runtime error 21 ms 29168 KB Execution killed with signal 6
20 Runtime error 21 ms 29236 KB Execution killed with signal 6
21 Runtime error 24 ms 29688 KB Execution killed with signal 6
22 Runtime error 26 ms 29936 KB Execution killed with signal 6
23 Runtime error 53 ms 34672 KB Execution killed with signal 6
24 Correct 9 ms 14420 KB Output is correct
25 Correct 13 ms 14488 KB Output is correct
26 Correct 40 ms 14676 KB Output is correct
27 Correct 242 ms 15720 KB Output is correct
28 Execution timed out 2071 ms 22332 KB Time limit exceeded
29 Correct 15 ms 14420 KB Output is correct
30 Correct 35 ms 14676 KB Output is correct
31 Correct 218 ms 15660 KB Output is correct
32 Execution timed out 2084 ms 25292 KB Time limit exceeded
33 Correct 10 ms 14420 KB Output is correct
34 Correct 9 ms 14420 KB Output is correct
35 Correct 19 ms 14528 KB Output is correct
36 Correct 23 ms 14576 KB Output is correct
37 Correct 201 ms 15480 KB Output is correct
38 Correct 313 ms 16076 KB Output is correct
39 Correct 8 ms 14420 KB Output is correct
40 Correct 12 ms 14384 KB Output is correct
41 Correct 20 ms 14548 KB Output is correct
42 Correct 23 ms 14544 KB Output is correct
43 Correct 48 ms 14676 KB Output is correct
44 Correct 85 ms 15044 KB Output is correct
45 Correct 173 ms 15656 KB Output is correct
46 Correct 300 ms 15700 KB Output is correct
47 Execution timed out 2094 ms 26872 KB Time limit exceeded