Codeforces Round #532 (Div. 2)
阿新 • • 發佈:2019-01-14
此題主要考慮一下B的值只與K有關就行,因為要關掉c=b+i⋅k的視窗,所以僅0<=b<k時關閉的視窗是有區別的,當b=0時就等同於b=k時關閉的視窗。
#include <iostream> using namespace std; int main (void) { int n, k; cin>>n>>k; int a[n]; for(int i = 0; i < n; i++) cin>>a[i];int max = 0; for(int b = 0; b < k; b++){ int infor = 0; int social = 0; for(int i = 0; i < n; i++){ if((i-b)%k!=0){ if(a[i] == -1) social++; else infor++; } }if(max<fabs(infor-social)) max = fabs(infor-social); } cout<<max<<endl; return 0; }
B題主要考慮怎麼去統計所有難度都出現過一次,這裡我採用了計不同難度出現次數的方式,只要控制時間複雜度就沒什麼問題。
#include <iostream> #include <math.h> using namespace std;int main (void) { int n,m; cin>>n>>m; int ques[m]; int sign[n+1] = {0}; int count = 0; for(int i = 0; i < m; i++) { cin>>ques[i]; } for(int i = 0; i < m; i++) { sign[ques[i]]++; if(sign[ques[i]]==1) { count++; } if(count == n) { count = 0; cout<<1; for(int k = 1; k <= n; k++){ sign[k]--; if(sign[k]!=0){ count++; } } } else { cout<<0; } } }