题目链接
题意:
删掉已知数组n的两个数使得数组中两两数字之和的因子大于一。
思路:
奇数+奇数=偶数,所以我们只需要保证奇数的个数是偶数即可,这样两两相加就都是偶数了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=2005;
const int mod=998244353;
const int inf=0x7fffffff;
const double pi=3.1415926535;
using namespace std;
int a[N];
signed main()
{
int t;
cin>>t;
while(t--)
{
int i,n,pre1,pre0,cnt1=0,cnt0=0,cnt=0;
cin>>n;
for(i=1;i<=n*2;i++)
{
cin>>a[i];
a[i]%=2;
}
for(i=1;i<=n*2;i++)
{
if(a[i])
{
cnt1++;
if(cnt1%2==0)
{
cout<<pre1<<i<<endl;
cnt++;
}
pre1=i;
}
else
{
cnt0++;
if(cnt0%2==0)
{
cout<<pre0<<i<<endl;
cnt++;
}
pre0=i;
}
if(cnt==n-1)
{
break;
}
}
}
return 0;
}
本文探讨了一道算法竞赛题目,目标是通过删除数组中的两个数,使剩余元素的两两和的因子均大于一。文章分享了一种有效策略,即确保数组中奇数个数为偶数,从而实现所有和均为偶数的目标。代码使用C++实现,通过计数奇数和偶数并调整,找到满足条件的删除方案。
1343

被折叠的 条评论
为什么被折叠?



