Codeforces Round #782 (Div. 2)(补)

A. 我们只需要构造出(b+1)块区间用'B'隔开即可 

#include <bits/stdc++.h>
using namespace std;
void solve(){
	int n,r,b;cin>>n>>r>>b;
	int cnt1=r/(b+1);
	int cnt2=r%(b+1);
	if(cnt2){
		for(int i=1;i<=cnt1+1;i++){
			cout<<'R';
		}
	}
	else {
		for(int i=1;i<=cnt1;i++){
		cout<<'R';
	}
	}
	for(int i=1;i<=b;i++){
		cout<<'B';
		if(i<cnt2){
			for(int j=1;j<=cnt1+1;j++)cout<<'R';
		}
		else{
			for(int j=1;j<=cnt1;j++)cout<<'R';
		}
	}
	cout<<endl;
}
int main(){
	int t;cin>>t;
	while(t--){
		solve();
	}
}

B. 正难则反 因为每个数都要异或k次 但是我们可以让某些数字少异或 

如果K是奇数 我们就让1少异或一次 否则就让0少异或一次 剩下的都堆给最后以为 反正最后一位除了0就是1 

#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n,k;cin>>n>>k;
    string s;cin>>s;
    vector<int> f(n,0);
    int tmpk=k;
    for(int i=0;i<n&&tmpk>0;i++)
    {
        if(k%2==s[i]-'0')
        {
            f[i]=1;
            tmpk--;
        }
    }
    f[n-1]+=tmpk;
    for(int i=0;i<n;i++)
    {
        if((k-f[i])%2==1)s[i]='1'-(s[i]-'0');
    }
    cout<<s<<endl;
    for(auto& e:f)  cout<<e<<" ";
    cout<<endl;
}
int main(){
	int t;cin>>t;
	while(t--){
		solve();
	}
}

C. 我们先要想什么时候应该需要换首都呢 换首都的消耗 w1=a(l-r), 节约的 w2=(n-i)*b*(l-r)所以w1<w2的时候我们就更新首都

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
int x[N];
void solve(){
    ll n,a,b;cin>>n>>a>>b;
    for(int i=1;i<=n;i++)cin>>x[i];
    ll now=0,ans=0;
    for(int i=1;i<=n;i++){
        ans+=b*(x[i]-x[now]);
        if(a<b*(n-i)){
            ans+=a*(x[i]-x[now]);
            now=i;
        }
    }
    cout<<ans<<'\n';
}
int main(){
	int t;cin>>t;
	while(t--){
		solve();
	}
}

D. 以后再说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值