最后一分钟写出B得代码没交上,哈哈哈哈,这辈子有了
这么简单得暴力要想3个小时,这辈子有了,哈哈哈
哈哈哈哈哈哈
A
void solve(){cin >> n >> m;vector<int> num(m+1);for(int i=1;i<=m;++i) cin >> num[i];bool isContinue = 1;For(i,2,m) if(num[i] != num[i-1] + 1) isContinue = 0;if(isContinue) cout << n + 1 - num.back() << '\n';else cout << 1 << '\n';
}
B
···
void solve(){
cin >> n >> m >> s, s = " " + s;
set
vector
For(i,1,m) cin >> x, st.insert(x), vec.pb(x);
// 最多 多 n 个黑色格子,但是怎么多?
// 每一步最少走 i 步,最多走到哪里?
// 一个B,一直增加当前能到达得最远步数int add = 0,now = 0;
for(int i=1;i<=n;++i){if(s[i] == 'A'){st.insert(i+add+1);}else{now = i+1+add;// cerr << now << '\n';while(st.count(now)) now++;st.insert(now);// int t = now;while(st.count(now))now++;// cerr << now << '\n';add += now - (i+add+1);// cerr << add << '\n';}
}cout << st.size() << '\n';
for(auto x : st) cout << x << ' ';
cout << '\n';
}
···
C
// 区间奇数和,偶数和
void solve(){cin >> n;vector<int> num(n*2+1), ans(n+2), oddSum(2*n+2), evenSum(2*n+2);For(i,1,n*2) cin >> num[i];For(i,1,n*2){oddSum[i] = oddSum[i-1], evenSum[i] = evenSum[i-1];if(i&1) oddSum[i] += num[i];else evenSum[i] += num[i];}For(i,1,n-1) ans[i+1] = ans[i] + num[2*n+1-i] - num[i];For(i,1,n) {if(i&1) ans[i] += evenSum[2*n+1-i] - evenSum[i-1] - (oddSum[2*n+1-i] - oddSum[i-1]);else ans[i] += oddSum[2*n+1-i] - oddSum[i-1] - (evenSum[2*n+1-i] - evenSum[i-1]);}For(i,1,n) cout << ans[i] << " \n"[i==n];
}