2022.4.19
作者:互联网
Codeforces Round #782 (Div. 2)
A. Red Versus Blue
直接挨个插空到没有为止
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1e5+10,INF=1e9;
int cnt[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--)
{
memset(cnt, 0, sizeof cnt);
int n,a,b;
cin >>n >> a >> b;
int x = a+1;
int tt = 0;
while(x--)
{
cnt[tt]++;
if(tt==b+1)
tt = 1;
else tt++;
}
for (int i = 1; i <= b + 1;i++)
{
for (int j = 1; j <= cnt[i];j++)
{
cout << "R";
}
if(i!=b+1)cout << "B";
}
cout << "\n";
}
return 0;
}
B - Bit Flipping
每次操作会固定一个数不动而其他数反转,对于一个数最终是0还是1由总的操作次数减去在该位的操作次数决定。如果结果为偶数该位不变,否则改变。分k为奇数还是偶数两种情况,如果k为奇数,对于1我们希望该位保持不动因此我们消耗一次,当次数为0的时候剩下的数为奇数直接异或即可。当k为偶数时,我们希望0改变成1,因此进行相同的操作。如果最后还有剩余的次数,基于贪心,最后一位的影响是最小的,因此把剩余的次数都加到最后一位去。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=2e5+10,INF=1e9;
int cnt[N];
char a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--)
{
int n,k;
cin>>n>>k;
for (int i = 1; i <= n;i++)
{
cin >>a[i];
cnt[i] = 0;
}
if(k&1)
{
for (int i = 1; i <= n;i++)
{
if(a[i]=='1'&&k)
{
k--;
cnt[i] = 1;
}
else
a[i] ^= 1;
}
}
else
{
for (int i = 1; i <= n;i++)
{
if(a[i]=='0'&&k)
{
cnt[i] = 1;
a[i] = '1';
k--;
}
}
}
if(k)
{
cnt[n] += k;
if(k&1)
a[n] ^= 1;
}
for (int i = 1; i <= n;i++)
{
cout << a[i];
}
cout << '\n';
for (int i = 1; i <= n;i++)
{
cout << cnt[i] << ' ';
}
cout <<'\n';
}
return 0;
}
C - Line Empire
有两种操作,操作1是占领一个国家消耗为b(posj-posi),操作2是更换首都,消耗为a(posj-posi)。我们可以枚举最后首都在哪个位置,预处理出前缀和,对于每个i,其后面的消耗为 b⋅((xi+1−xi)+(xi+2−xi)+…+(xj−xi)),即(sum[n] - sum[i] - pos[i] * (n - i)) * b。然后是将首都换到该位的消耗,会发现不论怎么换,最后的消耗都是(posi-0)a,同理消耗的b也为(posi)b,最小值更新为ans=min(ans,tmp1+tmp2+tmp3)。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=2e5+10,INF=1e9;
ll pos[N],sum[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--)
{
int n,a,b;
cin>>n>>a>>b;
for (int i = 1; i <= n;i++)
{
cin >>pos[i];
sum[i] = sum[i - 1] + pos[i];
}
ll ans = 1e18;
for (int i = 1; i <= n;i++)
{
ll res1 = (sum[n] - sum[i] - pos[i] * (n - i)) * b;
ll res2 = (pos[i]) * b;
ll res3 = (pos[i]) * a;
ans = min(ans, res1 + res2 + res3);
}
cout << ans << '\n';
}
return 0;
}
标签:typedef,19,cin,long,int,cnt,2022.4,include 来源: https://www.cnblogs.com/menitrust/p/16165480.html