Codeforces Round 1014 (Div. 2)

2025.3.30 Div2

Dashboard - Codeforces Round 1014 (Div. 2) - Codeforces

A. Kamilka and the Sheep(gcd)

题意

给出一个数组,可以每个数字加上d。任选两个数字,得到最大公约数。

思路

如果是两个数a,b, 加上相同的数字,求他们的最大公约数x。

算一算就知道,max(x)=abs(a-b)

所以答案就是排序后a[n]-a[1]

代码

void solve()
{
    int n,mx=0,j=0,k=0;
    cin>>n;
    fir(i,1,n)
    {
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    cout<<a[n]-a[1]<<'\n';
    
}

题外话

起初,想着数据小,暴力也可以,打算两两判断,想着d的取值。

这时已经联系到差值了,应该再多想一点,gcd该是多少,整个数组该怎么算。

后来还wa了一发,如此简单,羞愧、

B. Lady Bug(01交换)

题意

给出两个串a b, a i a_i ai可以和 b i − 1 b_{i-1} bi1交换, b i b_i bi可以和 a i − 1 a_{i-1} ai1交换。任意次操作后,是否可使第一个串全为0.

思路

终于通了!

昨天这道题卡我太长时间了,实在是无从下手。如今看来,肯定是当时太呆了 QWQ


请添加图片描述

与我而言,不易知,数字移动只有这两种轨迹。

对于绿色轨迹至少需要存在(n+1)/2 个0,黄色轨迹至少需要存在 n/2 个0

void solve()
{
	int n,c1=0,c2=0;
	string a,b;
	cin>>n>>a>>b;
	fir(i,0,n-1)
	{
		if(i&1)
		{
			if(a[i]=='0') c1++;
			if(b[i]=='0') c2++;
		}
		else
		{
			if(a[i]=='0') c2++;
			if(b[i]=='0') c1++;
		}
	}
	if(c2>=(n+1)/2&&c1>=n/2)
	cout<<"YES\n";
	else
	cout<<"NO\n";
}

C. +1-1数组最大值

题意

阿苏娜认为收到的礼物的美观程度为 max(a1,a2,…,an) 。她可以执行以下任意次数的操作(可能是零)。

  • 1≤i≠j≤n 中的 ai+aj 为奇数和 ,ai>0 ,将 ai 减少 11 ,将 aj 增加 1 。

求最终数组的最大值。

思路

从奇偶的个数入手,可以发现最终奇数的个数是没有变化的。

  • 所有数字的奇偶性相同,无法进行操作
  • 至少一个奇数,偶数:

​ 先留下一个偶数,将其他偶数累加到奇数上。此时用这个偶数依次和所有奇数进行操作

​ 当原本的奇数为1时,停止操作。原来的偶数仍然为偶数,再接着和下一个奇数操作。

​ 直至剩下最后一个奇数,将其减小为0.

​ 所以答案是:sum-c(奇数)+1

代码

void solve()
{
    int n,j=0,o=0,mx=0,sum=0;
    cin>>n;
    fir(i,1,n)
    {
        cin>>a[i];
        if(a[i]&1) j++;
        else o++;
        mx=max(mx,a[i]);
        sum+=a[i];
    }
    if(j==0||o==0)
    cout<<mx<<'\n';
    else
       cout<<sum-j+1<<"\n";
}

总结

又是掉分的一场

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值