1. 程式人生 > >2018 浙江省賽j zoj4033

2018 浙江省賽j zoj4033

本題大意:

給你一串數字1為男 0為女 隨著位數增加每個人擁有的寶石數遞增 (從一開始)

要把這些人分為4組

組 1 2為女 組3 4 為男

並且1 3之和 要等於 2 4之和

解法:

總值%2==1的話就無法均分 輸出-1

可以的話

從中值開始 貪心一下 取得到就判斷男女 男的就分到3 女的就分到1 

不能取到男的就分到4 女的就分到2

注意精度long long

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
long long record[maxn];
char clas[maxn];

int main()
{
	long long t;
	scanf("%d",&t);
	while(t--)
	{
		long long n=0;		
		scanf("%d",&n);
		getchar();
		scanf("%s",clas+1);
		long long sum=(n*(n+1))/2;
		
		if(sum%2) 
		{
			printf("-1\n");
			continue;
		}
		long long summid=sum/2;
		for(long long i=n;i>=1;i--)
		{
			if(summid>=i)
			{
				summid-=i;
				if(clas[i]=='1')
				{
					record[i]=3;
					//cout<<3;
				}
				else
				{
					record[i]=1;
				}
			}
			else
			{
				if(clas[i]=='1')
				{
					record[i]=4;
				}
				else
				{
					record[i]=2;
				}
			}
		}
		for(long long i=1;i<=n;i++)
		printf("%d",record[i]);
		printf("\n");//long long
	}
}