답안 #784786

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
784786 2023-07-16T14:19:27 Z aymanrs Shortcut (IOI16_shortcut) C++14
0 / 100
1 ms 212 KB
    #include<bits/stdc++.h>
    using namespace std;
    long long find_shortcut(int n, vector<int> l, vector<int> d, int c){
    	long long L = 2002090624, R = (long long)1e9 * (n+1), M, B = R;
    	long long t[n];
    	pair<long long, long long> mtd[n][n];
    	t[0] = 0;
    	for(int i = 1;i < n;i++) t[i] = l[i-1]+t[i-1];
    	for(int i = 0;i < n;i++){
    		for(int j = i+1;j < n;j++){
    			mtd[i][j-i-1] = make_pair(t[j]+d[j], t[j]-d[j]);
    		}
    		sort(mtd[i], mtd[i]+n-i-1);
    		long long nex = LONG_LONG_MAX;
    		for(int j = n-1;j > i;j--){
    			nex = mtd[i][j-i-1].second = min(mtd[i][j-i-1].second, nex); 
    		}
    	}
    	while(L <= R){
    		M = L+(R-L)/2;
    		bool ok = false;
			long long sp[n];
			for(int j = 0;j < n-1;j++){
				if(mtd[j][n-j-2].first-t[j]+d[j] <= M) continue;
				sp[j] = lower_bound(mtd[j], mtd[j]+n-j-1, make_pair(M+t[j]-d[j]+1, LONG_LONG_MIN))->second;
			}
    		for(int i = 0;i < n;i++){
    			long long le = 0, re = LONG_LONG_MAX;
    			for(int j = 0;j < n-1;j++){
    				if(mtd[j][n-j-2].first-t[j]+d[j] <= M) continue;
    				le = max(le, abs(t[j]-t[i])+mtd[j][n-j-2].first+d[j]+c-M);
    				re = min(re, sp[j]-abs(t[j]-t[i])-d[j]+M-c);
    			}
    			for(int j=0;j < n;j++) ok |= le <= t[j] && t[j] <= re; 
    		}
    		if(ok) {
    			R = M-1;
    			B = M;
    		} else L = M+1;
    	}
    	return B;
    }
    // int main(){
    // 	cout << find_shortcut(9, {10, 10, 10, 10, 10, 10, 10, 10},{20, 0, 30, 0, 0, 40, 0, 40, 0}, 30) << '\n';
    // }
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB n = 4, incorrect answer: jury 80 vs contestant 2002090624
2 Halted 0 ms 0 KB -