CodeForces 1417B Two Arrays

零子若發表於2020-10-03

題目連線
題意
給你一個組數和一個不幸數字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;
}

相關文章