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
	}
} 

猜你喜欢

转载自blog.csdn.net/weixin_41544329/article/details/83508040