Educational Codeforces Round 102 (Rated for Div. 2)

本文介绍了如何通过模拟解决数组元素替换问题以满足特定条件,字符串的最小公共倍率计算,以及优化逆序对的排列策略。涉及算法包括数组操作、字符串处理和逆序对分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. Replacing Elements

题意:给你一个长度为n的数组和要求数组里最大的数k,你可以通过操作a[i]+a[j]=a[k]改变数组里每个数的值,问能不能通过操作是的数组满足所有元素都小于k。
思路:模拟,如果最小的两个数的和小于k即可,注意还有一种是像 4 2 ,2 2 2 2 这种,要特判,如果最大的元素也小于k,则一定满足.

 #include <bits/stdc++.h>
using namespace std;
int a[1000];
int main()
{
	int i,j,n,t,k;
	cin>>t;
	while(t--){
		cin>>n>>k;
		for(i=0;i<n;i++){
			cin>>a[i];
		}
		sort(a,a+n);
		if(a[n-1]<=k||(a[0]+a[1])<=k){
			cout<<"YES"<<endl;
		}
		else 
			cout<<"NO"<<endl;
	}
}

B. String LCM

题意:给你两个字符串a,b,求是否存在这两个字符串的LCM串。
思路:通过他们的长度去求lcm,然后再通过lcm/长度,求得放大的倍数,放大完之后再比较是否相等即可。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,i,j,t;
	cin>>t;
	string s1,s2;
	while(t--){
		cin>>s1>>s2;
		int d1=s1.length();
		int d2=s2.length();
		int ans;
		ans=(d1*d2)/(__gcd(d1,d2));
		int m1,m2;
		m1=ans/d1,m2=ans/d2;
		string sa,sb;
		for(i=0;i<m1;i++)
			sa+=s1;
		for(i=0;i<m2;i++)
			sb+=s2;
		if(sb==sa)
			cout<<sa<<endl;
		else 
			cout<<-1<<endl;
	}
}

C. No More Inversions

题意:给你一个数组 a:1,2,3,…,k−1,k,k−1,k−2,…,k−(n−k) (k≤n<2k).要找一个 p 排列p的长度为k,然后根据数组a和p生成数组b, 要求是,b数组中的逆序对数量不大于a数组中的逆序对数量,且字典序最大。
思路:蛮难理解的,当时是找规律思路有点混乱,数组a,他是递增到k再递减n-k个数,为了使数组b尽可能的大,应该想法是把大数往前,但是要考虑逆序对的数量。
列如如果是

a:1 2 3 4 3
则最大的b应该是 b: 1 2 4 3 4
所以 p: 1 2 4 3

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,i,j,k,t;
	cin>>t;
	while(t--){
		int n,k;
		cin>>n>>k;
		if(k==1){
			cout<<1<<endl;
			continue;
		}
		if(n==k){
			for(i=1;i<=k-1;i++)
				cout<<i<<" ";
			cout<<k<<endl;
			continue;
		}
		else {
			for(i=1;i<=k-(n-k)-1;i++)
				cout<<i<<" ";
			for(i=k;i>=k-(n-k)+1;i--)
				cout<<i<<" ";
			cout<<i<<endl;
		}
	}
}
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值