Educational Codeforces Round 86 (Rated for Div. 2) 总结
程序员文章站
2022-05-12 12:25:01
...
Educational Codeforces Round 86 (Rated for Div. 2) 总结
一 . A. Road To Zero
``
题意:对于两个数x,y有两种操作,第一种花费代价为a使得x,y其中一个增一或者减一,第二种花费代价为b,使得x,y同时增一或者减一。
我的想法:读过好几遍之后,发现x,y是在0到10^9之间的正数,那么x,y一定是同号的,那么就只有两种计算方法,第一种是不管三七二十一直接每一个都减一,计算总的花费,第二种就是把两个数较大的多出来的部分单独减一,两个数相等的部分同时减一,最后计算总的花费,两种情况取最小。于是就有了我的代码,一直被卡倒腾了一个多小时还是不对。然后结束之后我去参考了同学的代码,发现她比我多了 一步操作就是考虑了x,y异号的情况,她的通过了。但是x,y怎么会异号呢????,我也很奇怪,不太明白。
//我的错误代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int t,x,y,a,b;
cin >> t;
while(t--)
{
long long ans1 = 0;
long long ans2;
cin >> x >> y;
cin >> a >> b;
if(a==0&&y==0)
cout << "0" << endl;
else
{
ans1 += min(x,y) * b;
ans1 += (max(x,y) - min(x,y)) * a;
ans2 = (x+y) * a;
cout << min(ans1,ans2) << endl;
}
}
return 0;
}
//大佬代码(真的很简洁)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int t;
cin >> t;
while (t--)
{
ll x, y, a, b;
cin >> x >> y >> a >> b;
b = min(a + a, b);
cout << min(x, y) * b + (max(x, y) - min(x, y)) * a << "\n";
}
}
//同学的正确代码
while (t--)
{
cin >> x >> y;
cin >> a >> b;
if (x == 0 && y == 0)
{
cout << '0' << endl;
continue;
}
else
{
ll m = max(x, y);
ll n = min(x, y);
ll u = m - n;
ll ans;
if (x * y >= 0)
ans = min((x + y) * a, n * b + u * a);
else
ans = min(n * b + (m + n) * a, u * a);
cout << ans << endl;
}
}
二. B. Binary Period
题意:给出一个字符串,让你求另一个字符串,并且该字符串满足1.全部由01组成;2.长度不超过给定字符串的2倍;3.给定字符串是所求字符串的字串;4.周期尽可能小;
我的想法:所给的字符串有两种情况,第一全部由相同的字符组成,第二有不同的字符组成。如果组成字符相同那么那么周期直接最小就是1;如果不相同那么最小周期就是2;01间隔;然而想的非常好但是还是没做出来,当时一直以为是代码写错了,然后一直在差代码的错结果最后时间到了还是没弄出来,比赛完成之后回头再看发现他要求的字符长度是1到100;那么所求的就是1到200;我本来是想定义一个220的数组,结果写成了22;然后一直没看见,真是活该出错。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 22;//220 这该死的22
int t;
char s[N];
int main()
{
cin >> t;
while (t--)
{
cin >> s;
int len = strlen(s);
int cnt = 0;
for(int i = 0; i < len; i++)
cnt += (s[i]-'0');
if((cnt==0)||(cnt==len))
{
cout << s << endl;
continue;
}
for(int i = 0; i < len-1; i++)
{
if(s[i]==s[i+1]&&s[i]=='1')
cout << s[i] << "0";
else if(s[i]==s[i+1]&&s[i]=='0')
cout << s[i] << "1";
else
cout << s[i];
}
cout << s[len-1] << endl;
}
return 0;
}
//大佬的代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int t;
cin >> t;
while (t--)
{
string s;
cin >> s;
int zero = 0, one = 0;
for (auto i : s)
{
if (i == '1')
one++;
else
zero++;
}
if (!zero || !one)
cout << s << '\n';
else
{
int n = s.length();
while (n--)
cout << "10";
cout << '\n';
}
}
}
推荐阅读
-
Educational Codeforces Round 71 (Rated for Div. 2)E. XOR Guessing
-
Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree
-
Educational Codeforces Round 60 (Rated for Div. 2) ----A - Best Subsegment(思维题)
-
Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution(多颗树状数组+思维)
-
【解题报告】Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)
-
Educational Codeforces Round 85 (Rated for Div. 2) C. Circle of Monsters(前缀和 预处理 贪心)
-
Educational Codeforces Round 98 (Rated for Div. 2) A-E 题解
-
Educational Codeforces Round 93 (Rated for Div. 2) A. Bad Triangle
-
Educational Codeforces Round 93 (Rated for Div. 2) B - Substring Removal Game
-
Educational Codeforces Round 99 (Rated for Div. 2) C. Ping-pong