[cf] Codeforces Round #754 (Div. 2)

前言

没想到,只有过3题的水平,都可以上蓝
传送门 :

A.M. Deviation

操作 : abc中任意选一个 让其中一个减一另一个加一
答案 : 使得最后答案 |a+c - 2*b| 最小

我们令 s u m = a + c sum = a+c sum=a+c 会发现 选这两个数进行操作的话,最终对于sum来说值是不变的 因此我们 的 a n s = ∣ s u m − 2 ∗ b ∣ ans = |sum - 2*b| ans=sum2b

所以嘞 对于这个式子有两个情况 s u m + 1 − 2 ∗ ( b − 1 ) sum+1 - 2*(b-1) sum+12(b1) 答案总体 +3

另一个答案总体 -3

因此这题的答案的最小值 要么是 0 或 者 ∣ − 1 ∣ = 1 0或者|-1|=1 01=1

因此我们只需要判断能否被3整除就行

CODE

int a,b,c;
cin>>a>>b>>c;
int d = abs(a+c -2*b);
if(d%3)
{
	cout<<1<<endl;
	return;
}
cout<<0<<endl;
return ;

B. Reverse Sort

这题是最不理性的一题 QAQ

对于这题答案只有 0和 1 (证明不出来)

我们知道最后的状态一定是 0在前面 1在后面

因此我们可以记录 0 和 1 的个数

然后枚举除 前c0( c 0 代 表 0 的 个 数 c0代表0的个数 c00) 中1的个数 就是不该出现在这里的

然后再处理除 c0 - c0+c1中0的个数 就是不该出现再这里的

然后输出答案即可

这很cf

CODE

vector<int> ans;

cin>>n;string s;cin>>s;
int c0 = 0 ,c1 = 0 ;
for(auto it : s)
{
	if(it == '0') c0++;
	else c1++;
}

for(int i = 0 ;i<=c0-1;i++)
if(s[i] != '0')
ans.pb(i+1);

for(int i = c0;i<=c0+c1-1;i++)
if(s[i] != '1')
ans.pb(i+1);

if(ans.size() == 0 )
cout<<0<<endl;
else
{
	cout<<1<<endl;
	cout<<ans.size()<<" ";
	for(auto it:ans)
	cout<<it<<" ";
	cout<<endl;

}

C - Dominant Character

属于是水题了

我们可以发现答案的格式是 a…a

对于这个无非就以下几种状态

  • aa
  • aba,aca
  • abca,acba
  • abbacca,accabba
    直接判断即可

CODE

void solve()
{
	int n;cin>>n;
	string s;cin>>s;
	int ans = INF;
	
	
	for(int i  = 0;i<n;i++)
	{
		if(s[i] == 'a')
		{
			if(s[i+1] == 'a')
			{
				ans = min(ans,2);

			}
			if(s[i+1] == 'c'&& s[i+2] == 'a')
			{
				ans = min(ans,3);
			}
			
			if(s[i+1] == 'b'&& s[i+2] == 'a')
			{
				ans = min(ans,3);
				
		
			}
			
			if(s[i+1] == 'b' &&s[i+2] =='c' && s[i+3] =='a')
			{
				ans = min(ans,4);
				
	
			}
			
			if(s[i+1] == 'c' &&s[i+2] =='b' && s[i+3] =='a')
			{
				ans = min(ans,4);
				
			
			}
			
			if(s[i+1] == 'c' && s[i+2] =='c' && s[i+3] == 'a' &&s[i+4] == 'b' && s[i+5]=='b'&&s[i+6] == 'a')
			{
				ans = min(ans,7);
				
	
			}
			
	
			if(s[i+1] == 'b' && s[i+2] =='b' && s[i+3] == 'a' &&s[i+4] == 'c' && s[i+5]=='c'&&s[i+6] == 'a')
			{
				ans = min(ans,7);
	
			}

			
		}
	}
	if(ans!=INF)
	cout<<ans<<endl;
	else
	cout<<-1<<endl;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值