Hot Black Hot White

链接 https://codeforces.com/contest/1725/problem/H

题意

给定n个整数ai,定义H(ai,aj)的值为

H(ai,aj) = concat(ai,aj) * cancat(aj,ai) + ai*aj(mod 3)

其中concat(ai,aj)表示两个数的拼接,如concat(23,14)=2314,而concat(14,23)=1423。

想法

显然和每个ai膜三后的值有关,分别带入0,1,2,可以发现一些重要的性质

如果0的个数有一半,则取它们做为一组,此时Z取2

如果非0的个数有一半,则取它们做为一组,此时Z取0

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 200010;
const int mod = 1e9 + 7;
 
 
int n, x;
int a[maxn];
vector<int> p[2];
char s[maxn];
void solve() {
	scanf("%d", &n);
	for (int i = 0; i < n; ++i) 
	{
		scanf("%d",&x);
		x=1ll*x*x%3;
		x=(x!=0);
		p[x].push_back(i);
	}
	int mx = 0;
	if (p[mx].size()<p[1].size())  mx=1;
	for (int i=0;i<n;++i)  s[i]='0';
	int z=0;
	if (mx==0&&p[mx].size()>=n/2) z=2;
	printf("%d\n",z);
	for (int i = 0;i<min((int)p[mx].size(),n/2);++i) 
	{
		int &pos = p[mx][i];
		s[pos] = '1';
	}
	s[n] = '\0';
	printf("%s\n", s);
}
 
int main() {
		solve();
}
posted @ 2022-10-08 20:41  by_wang  阅读(44)  评论(0)    收藏  举报
Live2D