codeforces#515.div3
阿新 • • 發佈:2018-12-24
A. Vova and Train
水題,[1,n]能被m整除的數的個數為n/m
B. Heaters
貪心
#include <bits/stdc++.h> #include <cstdio> const int MAXN = 2000 + 2; bool flag = false; int n, r, cnt; int a[MAXN], b[MAXN]; void work(int pos) { for (int i = std::max(pos - r + 1, 1); i <= std::min(pos + r - 1, n); i++) b[i] = 1; } int main() { scanf("%d %d", &n, &r); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for (int i = 1; i <= n; i++) { flag = false; if (!b[i]) { for (int j = std::max(i + r - 1, 1); j >= std::min(i - r + 1, n); j--) { if (a[j]) { work(j); cnt++; flag = true; break; } } if (!flag) { printf("-1\n"); return 0; } } } printf("%d\n", cnt); return 0; }
C. Books Querie
一共維護三個東西,編號為x的書的位置,最左邊空位的位置以及最右邊空位的位置
#include<bits/stdc++.h> using namespace std; #define maxn 200010 int main() { int a[maxn]; int l=100000; int r=100000; int q; scanf("%d",&q); for(int i=1;i<=q;i++) { char ch; int x; cin>>ch>>x; if(ch=='L') { a[x]=l--; if(i==1) r++; } else if(ch=='R') { a[x]=r++; if(i==1) l--; } else { cout<<min(a[x]-l+1,r-a[x]+1) - 2<<endl; } } return 0; }