题解 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.\) ❀

浙公网安备 33010602011771号