Codeforces Round 859 (Div. 4)

蒟蒻第一次打CF,最简单的Div4只A了4道简单题,后面一个小时都死磕在F题上。一开始用了GCC编译器,第一题都编译报错,呜呜呜。后来才发现应该用G++。

A

Codeforces Round 859 (Div. 4)_第1张图片

Codeforces Round 859 (Div. 4)_第2张图片

#include
using namespace std;
int main()
{
	int n;
	cin>>n;
	for (int i=0;i>a>>b>>c;
		if (a+b==c) cout<<"+"<

评价:签到题

 B

Codeforces Round 859 (Div. 4)_第3张图片

Codeforces Round 859 (Div. 4)_第4张图片

#include
using namespace std;

int main()
{
	int n;
	cin>>n; 
	for (int i=0;i>m;
		int candy[m];
		for (int j=0;j>candy[j];
		}
		for (int j=0;jbianca) cout<<"Yes"<

评价:将偶数全部放在前面,即先取完全部的偶数。

若偶数和大于奇数和即为Yes,否则为No

Codeforces Round 859 (Div. 4)_第5张图片

Codeforces Round 859 (Div. 4)_第6张图片

#include
using namespace std;
int main()
{
	int n;
	cin>>n;
	for (int i=0;i>len;
		cin>>s;
		char c;
		int flag=0;
		for (int i=0;i

思路:由于每个字母都可以被任意赋值,那么只要保证相同的字母在不相邻的位置即可。我的做做法可能比较繁琐,应该还有更加简单的做法。 我的做法是对于每一个字母,从它的后一位开始,以2为步长去遍历全数组,若出现与它相同的字母,则不满足“相同的字母在不相邻的位置”,故是有不行的,若整个数组遍历之后都未出现该种情况,则是满足的。

D

Codeforces Round 859 (Div. 4)_第7张图片

Codeforces Round 859 (Div. 4)_第8张图片

Codeforces Round 859 (Div. 4)_第9张图片

#include
using namespace std;
int main()
{
	int t;
	cin>>t;
	for (int i=0;i>n>>q;
		int map[n+1];
		map[0]=0;
		for (int j=1;j<=n;j++)
		{
			int temp;
			cin>>temp;
			map[j]=map[j-1]+temp;
		}
		for (int j=0;j>l>>r>>k;
			int total=(map[l-1]-map[0])+(map[n]-map[r])+k*(r-l+1);
			if (total%2==0) cout<<"No"<

思路:需要大量地查询某段区间的和,而且要多次查询,显然用每次遍历的方法肯定超时,根据这个性质我们可以使用前缀和。

前缀和的性质为:对于原数组a[],前缀和数组 m[],有m[i]=a[i]+m[i-1],

这样a[i]+……+a[j]=m[j]-m[i-1],可以实现O(1)时间内查询到这个加和的结果

具体地,对本题而言,查询0到l和r到n的和,然后加上中间替换数的(r-l+1)倍即可。

E

F

G1

G2

你可能感兴趣的:(Codeforces,c++,算法,c语言)