codeforcese round 957 div3
没申请留校,恰好碰见宿管巡楼,把隔壁寝没申请的留校的宿舍给一锅端了,吓得我直接关灯关电脑,再加上nt的真人验证,要掉大分了
A only pluses
问题:
思路:暴力枚举乘的次数
代码:
#include <bits/stdc++.h>
using namespace std;
void solve() {
long long a, b, c;
cin >> a >> b >> c;
int all = 5;
long long ans = 0;
for(int i = 0; i <= 5; i ++ ) {
for(int j = 0; j <= 5; j ++ ) {
for(int k = 0; k <= 5; k ++ ) {
if(i + j + k == 5) {
ans = max(ans, (a + i) * (b + j) * (c + k));
}
}
}
}
cout << ans << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t -- ) {
solve();
}
return 0;
}
B angry monk
问题:
思路:对于每个数x拆成x个1要x - 1步,合并要x步,因此一个数x的贡献就是2 * x - 1。并且有一个数不用拆,因为所有拆分后的数都要合并到这个数上,如果步数最小,保留最大值即可
代码:
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n, k;
cin >> n >> k;
vector<int> a(k + 1);
for(int i = 1; i <= k; i ++ ) cin >> a[i];
int ans = 0;
sort(a.begin() + 1, a.end());
for(int i = k - 1; i >= 1; i -- ) {
ans += a[i];
ans += a[i] - 1;
}
cout << ans << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t -- ) {
solve();
}
return 0;
}
C Gorilla and Permutation
问题:
思路:要让f尽可能的大,g尽可能的小
f[i]表示a[i] >= k的前缀和 因此f尽可能的大,让最大的数在最前面,从n排到k即可
g[i]表示a[i] <= m的前缀和 因此g尽可能的小, 让m排到最后面,从m排到1从后往前排即可
怎么这两段处理交叉,或者不交叉的情况,开个st数组对序列判重,先输出n 到 k,再输出没有被判重的代码块,再从1到m中输出没有被输出的
代码:
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n, m, k;
cin >> n >> m >> k;
vector<int> a, b, c;
vector<bool> st(n + 1);
for(int i = k; i <= m; i ++ ) c.push_back(a[i]);
for(int i = n, j = m; i >= k || j >= 1; ) {
if(i >= k) {
if(!st[i]) {
a.push_back(i);
st[i] = 1;
}
i --;
}
if(j >= 1) {
if(!st[j]) {
b.push_back(j);
st[j] = 1;
}
j --;
}
}
for(auto t: a) cout << t << " ";
for(int i = 1; i <= n; i ++ ) {
if(!st[i]) cout << i << " ";
}
reverse(b.begin(), b.end());
for(auto t: b) cout << t << " ";
cout << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t -- ) {
solve();
}
return 0;
}
D TEST of love
问题:
思路:要尽可能的往木头上跳,如果不能跳到木板上,那么就按跳的最大距离跳到水中,游到下一个木板,并在这一段游泳的过程中判断是否遇到鳄鱼,以及游泳距离
代码:
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n, m, k;
cin >> n >> m >> k;
string s;
cin >> s;
s = 'L' + s + 'L';
vector<int> pos;
pos.push_back(0);
for(int i = 1; i <= n; i ++ ) {
if(s[i] == 'L') pos.push_back(i);//记录木头位置
}
pos.push_back(n + 1);//岸
int j = 0;
bool flag = true;
bool in_L = true;
int cnt = k;
for(int i = 0; i <= n; i ++ ) {
if(in_L) {
if(pos[j] + m < pos[j + 1]) {
in_L = false;
i = pos[j] + m;
} else if(pos[j] + m >= pos[j + 1]) {
i = pos[j + 1];
j ++;
in_L = true;
}
}
if(!in_L) {
if(s[i] == 'W') cnt --;
else if(s[i] == 'C') {
flag = false;
break;
} else if(s[i] == 'L') {
j ++;
i = pos[j];
in_L = true;
}
} else i --;
}
if(cnt < 0) flag = false;
if(flag) cout << "Yes" << endl;
else cout << "No" << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t -- ) {
solve();
}
return 0;
}
E Novice's Mistake
问题:
思路:
代码:
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n;
cin >> n;
int len = 0;
int tmpn = n;
while(tmpn) {
len ++;
tmpn /= 10;
}
string str = to_string(n);
vector<pair<int, int>> ans;
for(int a = 1; a <= 10000; a ++ ) {//枚举a
string s = str;//a * n的字符串
int tmp = a - 1;
while(s.size() <= 6 && tmp -- ) {
s += str;
}
int totlen = a * len;
for(int i = 1; i <= min(6, totlen); i ++ ) {
string s1 = s.substr(0, i);
int b = totlen - i;
string s2 = to_string(a * n - b);
if(s1 == s2 && b != 0) ans.push_back({a, b});
}
}
cout << ans.size() << endl;
for(auto t: ans) {
cout << t.first << " " << t.second << endl;
}
}
int main() {
int t;
cin >> t;
while(t -- ) {
solve();
}
return 0;
}
F
问题:
思路:
代码:
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n, k;
cin >> n >> k;
vector<int> a(n + 1);
for(int i = 1; i <= n; i ++ ) cin >> a[i];
int ans = 1;
map<int, int> now;
for(int i = 1; i <= n; i ++ ) {
bool flag = true;
if(k % a[i] == 0 && a[i] != 1) {
if(now.empty()) {
now[a[i]] ++;
} else {
queue<int> stk;
for(auto t: now) {
long long x = t.first * a[i];
if(x < k) stk.push(x);
else if(x == k) flag = false;
}
while(stk.size()) {
int t = stk.front();
stk.pop();
now[t] ++;
}
now[a[i]] ++;
}
}
if(!flag) {
ans ++;
now.clear();
i --;
}
}
cout << ans << "\n";
//cout << ma.size();
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t -- ) {
solve();
}
return 0;
}
原文地址:https://blog.csdn.net/2201_75845839/article/details/140385967
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!