Codeforces 761D Dasha and Very Difficult Problem(贪心)
题目链接 Dasha and Very Difficult Problem
求出ci的取值范围,按ci排名从小到大贪心即可。
需要注意的是,当当前的ci不满足在这个取值范围内的时候,判为无解。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define rep(i,a,b) for(int i(a); i <= (b); ++i) 6 7 const int N = 100000 + 10; 8 int a[N], b[N], c[N], op[N]; 9 int l, r, L, R, cnt; 10 bool flag; 11 int n, x; 12 13 int main(){ 14 15 scanf("%d%d%d", &n, &l, &r); 16 rep(i, 1, n) scanf("%d", a + i); 17 rep(i, 1, n) scanf("%d", c + i); 18 rep(i, 1, n) op[c[i]] = i; 19 20 L = l - r, R = r - l; cnt = L; flag = true; 21 rep(i, 1, n){ 22 x = op[i]; 23 if (a[x] + cnt < l){ 24 if (l - a[x] > cnt){ 25 b[x] = l; 26 cnt = l - a[x] + 1; 27 } 28 else{ 29 flag = false; 30 break; 31 } 32 } 33 else 34 if (a[x] + cnt > r){ 35 flag = false; 36 break; 37 } 38 else{ 39 b[x] = a[x] + cnt; 40 ++cnt; 41 } 42 } 43 44 if (!flag) puts("-1"); 45 else rep(i, 1, n) printf("%d ", b[i]); 46 return 0; 47 48 }