题目连接
题意:
给你一个组数和一个不幸数字T,要求把数组分成两部分,标记为1or0,同为1或者0的两个数相加尽可能的不等于T,求任意一种分法。
解题思路:
T/2+T/2=T,既然这样,把所有小于T/2的数字放在一边,大于T/2的数放在另一边,这样无论怎么加都不会加到T。刚好等于T/2的数据就一个为0一个为1这样交替分开放。
#include<bits/stdc++.h>
#define maxn 1000001
using namespace std;
long long int a[maxn];//int会TE
int main()
{
int num;
cin>>num;
while(num--)
{
long long int n,T;
cin>>n>>T;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int x=1;
for(int i=1;i<=n;i++)
{
if(T%2!=0)
{
int t=T/2;
if(a[i]>t)
{
a[i]=1;
}
else
{
a[i]=0;
}
}
else
{
int t=T/2;
if(a[i]>t)
{
a[i]=1;
}
else if(a[i]<t)
{
a[i]=0;
}
else
{
a[i]=x;
x=1-x;
}
}
}
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}