ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#212720 | #3830. D | eam2539 | 20 | 76ms | 3028kb | C++11 | 2.4kb | 2024-10-20 10:04:05 | 2024-10-20 12:39:35 |
answer
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
bool check_k0(int x, int n, int m, const vector<int> &a) {
ll operations_needed = 0;
vector<ll> diff(n + 2, 0);
ll current = 0;
for(int j=1; j<=n; ++j){
current += diff[j];
if(current < a[j-1]){
ll need = a[j-1] - current;
operations_needed += need;
if(operations_needed > m) return false;
int s = min(j + x, n);
diff[j] += need;
diff[s +1] -= need;
current += need;
}
}
return operations_needed <= m;
}
bool check_k1(int x, int n, int m, const vector<int> &a){
ll max_required_x = 0;
for(int j=1; j<=n; ++j){
ll required = ( (ll)a[j-1] + m -1 ) / m + j -1;
if(x < required){
return false;
}
}
return true;
}
bool check_k2(int x, int n, int m, const vector<int> &a){
ll operations_needed = 0;
vector<ll> add(n + 2, 0);
vector<ll> dec(n + 2, 0);
ll current_sum = 0;
for(int j=1; j<=n; ++j){
current_sum += add[j];
if(j > x){
current_sum -= dec[j];
}
if(current_sum < a[j-1]){
ll need = a[j-1] - current_sum;
operations_needed += need;
if(operations_needed > m) return false;
add[j] += need * (ll)x;
if(j + x <= n){
dec[j + x] += need;
}
current_sum += need * (ll)x;
}
}
return operations_needed <= m;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n, m, k;
cin >> n >> m >> k;
vector<int> a(n);
for(auto &x : a) cin >> x;
int left = 0, right = 200000;
int answer = -1;
while(left <= right){
int mid = left + (right - left)/2;
bool feasible = false;
if(k ==0){
feasible = check_k0(mid, n, m, a);
}
else if(k ==1){
feasible = check_k1(mid, n, m, a);
}
else if(k ==2){
feasible = check_k2(mid, n, m, a);
}
if(feasible){
answer = mid;
right = mid -1;
}
else{
left = mid +1;
}
}
cout << answer;
}
Details
小提示:点击横条可展开更详细的信息
Subtask #1:
score: 5
Accepted
Test #1:
score: 5
Accepted
time: 0ms
memory: 1252kb
input:
5 2 0 1 4 2 4 2
output:
-1
result:
ok 1 number(s): "-1"
Test #2:
score: 0
Accepted
time: 0ms
memory: 1244kb
input:
5 4 0 3 3 3 2 4
output:
4
result:
ok 1 number(s): "4"
Test #3:
score: 0
Accepted
time: 1ms
memory: 1248kb
input:
5 3 0 5 2 2 4 2
output:
-1
result:
ok 1 number(s): "-1"
Test #4:
score: 0
Accepted
time: 0ms
memory: 1248kb
input:
5 5 0 5 4 1 3 2
output:
4
result:
ok 1 number(s): "4"
Test #5:
score: 0
Accepted
time: 0ms
memory: 1248kb
input:
5 2 0 5 4 2 4 4
output:
-1
result:
ok 1 number(s): "-1"
Subtask #2:
score: 15
Accepted
Test #6:
score: 15
Accepted
time: 8ms
memory: 2364kb
input:
100000 3 0 55571 62024 7086 67802 12577 42004 72323 45260 40287 39641 64847 42428 20318 80027 1675 1...
output:
-1
result:
ok 1 number(s): "-1"
Test #7:
score: 0
Accepted
time: 9ms
memory: 2368kb
input:
100000 8 0 36036 57465 41887 17317 60373 61269 46492 67963 2549 76969 65274 49046 45876 28759 90924 ...
output:
-1
result:
ok 1 number(s): "-1"
Test #8:
score: 0
Accepted
time: 8ms
memory: 2368kb
input:
100000 345779 0 77937 16610 76642 46218 97870 25174 72710 41405 46404 77129 58889 92261 62956 90112 ...
output:
33331
result:
ok 1 number(s): "33331"
Test #9:
score: 0
Accepted
time: 10ms
memory: 2368kb
input:
100000 130400 0 20765 84750 25569 4034 50808 69305 81243 22986 10531 40222 39994 26549 22297 82520 6...
output:
99997
result:
ok 1 number(s): "99997"
Test #10:
score: 0
Accepted
time: 3ms
memory: 2368kb
input:
100000 912222 0 8745 38207 60092 71722 52971 57093 95705 81528 46159 5367 17799 81004 56400 92268 70...
output:
11107
result:
ok 1 number(s): "11107"
Subtask #3:
score: 0
Wrong Answer
Test #11:
score: 10
Accepted
time: 0ms
memory: 1252kb
input:
1000 1 1 993 705 891 648 406 9 983 913 370 408 607 47 85 199 767 448 723 255 253 302 754 135 641 726...
output:
1991
result:
ok 1 number(s): "1991"
Test #12:
score: -10
Wrong Answer
time: 0ms
memory: 1256kb
input:
1000 529 1 321 273 256 430 151 307 590 682 756 267 100 169 963 681 121 604 781 631 573 463 50 114 36...
output:
1001
result:
wrong answer 1st numbers differ - expected: '56', found: '1001'
Subtask #4:
score: 0
Wrong Answer
Test #16:
score: 0
Wrong Answer
time: 26ms
memory: 1588kb
input:
100000 4 1 10156 27005 39480 62054 63362 28009 65831 14391 93683 7991 17027 26313 1403 15929 30567 1...
output:
124742
result:
wrong answer 1st numbers differ - expected: '91939', found: '124742'
Subtask #5:
score: 0
Wrong Answer
Test #21:
score: 0
Wrong Answer
time: 0ms
memory: 1268kb
input:
1000 169 2 853 394 985 195 859 84 227 50 641 365 409 407 845 112 7 582 920 965 590 869 550 781 40 44...
output:
-1
result:
wrong answer 1st numbers differ - expected: '26', found: '-1'
Subtask #6:
score: 0
Wrong Answer
Test #26:
score: 0
Wrong Answer
time: 11ms
memory: 3028kb
input:
100000 31778 2 9482 16920 65207 41338 19891 97532 56865 946 56851 5908 19270 8065 53369 97241 69805 ...
output:
5
result:
wrong answer 1st numbers differ - expected: '93', found: '5'