Codeforces Round #651 (Div. 2)个人题解(A,B,C,D,E)

A题:
题意:找出1-n中任意一对数a,b的最大公约数的最大值;
思路:直接找除以2的就行了,水题;

#include 
using namespace std;

int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		int n;
		cin >> n;
		if(n%2==0)
			cout << n/2 <

B题:
题意:给出一个长度为2n的数组a,求一个长度为n-1的数组b满足以下条件:
1.数组b的元素由a任意2个数的和组成。(不能重复选)
2.gcd(b1,b2,……,bn-1)>1
思路:直接把数组b全部凑成偶数就行了。(输出的下标,比赛的时候wa了一发)。

#include 
using namespace std;
 
int a[2010];
int b[2010];
 
int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		int n;
		cin >> n;
		int c1=0,c2=0;
 
		int v;
		for(int i=0;i<2*n;i++)
		{
			scanf("%d",&v);
			if(v%2==0) a[c1++]=i+1;
			else b[c2++]=i+1;
		}
		
		if(c2%2!=0)
		{
			c1--;c2--;
		}
		else
		{
			if(c2==0) c1-=2;
			else c2-=2;
		}
 
		for(int i=0;i

C题:
题意:两个人玩一个游戏,给出一个数,可以执行以下操作:
1.将这个数整除一个大于1的奇数。
2.如果这个数大于1,将这个数减1.
当到某个人的回合不能进行操作时他就输了
思路:当这个数为奇数时第一个人必赢。当这个数是偶数时,如果这个数的偶数因子最大为2,而且奇数因子无法拆分时,第一个人不能取胜,如果可以拆分或者最大偶数因子不为2时,第一个人都是必胜。

#include 
using namespace std;
 
int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		int n;
		cin >> n;
 
		if(n==1||n==4||n==6) 
		{
			cout << "FastestFinger" <1&&num>2)
				cout << "Ashishgup" <1&&num==2)
			{
				int flag=0;
				int m=sqrt(n);
				for(int i=3;i<=m;i+=2)\\看奇数因子还能不能拆分
				{
					if(n%i==0)
					{
						flag=1;
						break;
					}
				}
 
				if(flag)
					cout << "Ashishgup" <

D题:
题意:给出一个数组a,求一个子序列b使它的奇数项的最大值和偶数项的最大值中的最小值最小。
思路:二分,模拟。

#include 
#define MAX 200005
using namespace std;

int a[MAX];
int n,k;
 
bool check(int x)
{
	int flag=0,cnt=0;
 
	for(int i=0;i=a[i])
		{
			cnt++;
			flag=!flag;
		}
	}
 
	if(cnt>=k)
		return true;
	cnt=0;flag=1;
	for(int i=0;i=a[i])
		{
			cnt++;
			flag=!flag;
		}
	}
 
	if(cnt>=k)
		return true;
 
	return false;
}
 
int main()
{
	cin >> n>> k;
	for(int i=0;i

E题:
题意:给你两个01字符串a,b,求使其相等的最小操作数。可执行的操作为选择a的一个字串,平行向右移动(a1=an,a2=a1……)
思路:直接模拟,相等的位置不用管。

#include 
using namespace std;

 
int main()
{
	int n;
	cin >> n;
	string s1,s2;
	cin >> s1 >> s2;
 
	int num=0;
	int c0=0,c1=0;
	int ans=0;
	for(int i=0;i0)
			   c0--;
			c1++;
		}
		else
		{
			num--;
			if(c1>0)
				c1--;
			c0++;
		}
	}
	if(num!=0)
		cout << -1 <

你可能感兴趣的:(Codeforces Round #651 (Div. 2)个人题解(A,B,C,D,E))