题解 CF1370B 【GCD Compression】

一道贪心。

珂以使 \(gcd\)\(2\) 这样,只需要将奇偶分开,奇数存一个数组,偶数存一个数组,到时成对输出即可,要注意,输出的数据是在数列中的序号,第一次提交 \(WA\) 在这里。

然后就是代码


#include<bits/stdc++.h>
#define FOR(i,j,k)  for(int i=(j);i<=(k);i++)
using namespace std;
int t,n;
int a[2001];
int O[2001],E[2001];//Odd存奇数,Even存偶数
int cnt,cnt1,CNT;
int main()
{
	scanf("%d",&t);
	while(t--)//T组
	{
		cnt=0,cnt1=0;
		scanf("%d",&n);
		for(int i=1;i<=2*n;i++)
		{
			scanf("%d",&a[i]);
			if(a[i]%2==1)	O[++cnt]=i;//奇数
			else	E[++cnt1]=i;//偶数
		}
		CNT=0;
		for(int i=1;i<=cnt-1;i+=2)//先成对输出奇数,cnt之所以-1是因为担心cnt为奇数,就会越界
			if(CNT<n-1)	printf("%d %d\n",O[i],O[i+1]),CNT++;//进行n-1次操作所以摆个CNT计数
		for(int i=1;i<=cnt1-1;i+=2)
			if(CNT<n-1)	printf("%d %d\n",E[i],E[i+1]),CNT++;
	}
	return 0;//结束
}

\(The\) \(End.\)

posted @ 2020-08-08 21:45  LJC001151  阅读(63)  评论(0)    收藏  举报