求ABC-EHACK
  • 板块学术版
  • 楼主chenyuchen_1
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/17 10:05
  • 上次更新2023/12/17 11:49:25
查看原帖
求ABC-EHACK
1023780
chenyuchen_1楼主2023/12/17 10:05

球球啦!

#include <bits/stdc++.h>
using namespace std;
int a[1000010],b[1000010],us[1000010],usb[1000010],zb[1000010];
map<int,int> mp;
map<int,int> sy;
using MII = map<int,int>::iterator;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i = 1;i <= n;i++)
	{
		scanf("%d%d",&a[i],&b[i]);
		if(a[i] == 1) sy[b[i]]++;
	}
	for(int i = 1;i <= n;i++)
	{
		if(a[i] == 1)
		{
			mp[b[i]]++;
		}
		else
		{
			mp[b[i]]--;
		}
	}
	for(MII it = mp.begin();it != mp.end();it++)
	{
		if(it->second < 0)
		{
			printf("-1");
			return 0;
		}
	}
	for(int i = 1;i <= n;i++)
	{
		if(a[i] == 2)
		{
			us[b[i]]++;
			usb[b[i]]++;
			//cout << b[i] << endl;
		}
	}
	int mx = 0;
	int now = 0;
	for(int i = 1;i <= n;i++)
	{
		if(a[i] == 1)
		{
			if(sy[b[i]] <= usb[b[i]] || (zb[b[i]] == 0 && usb[b[i]] > 0))
			{
				now++;
				zb[b[i]]++;
				usb[b[i]]--;
			}
			sy[b[i]]--;
		}
		if(a[i] == 2)
		{
			zb[b[i]]--;
			if(zb[b[i]] < 0)
			{
			  printf("-1");
			  return 0;
			}
			now--;
		}
		mx = max(mx,now);
	}
	cout << mx << endl;
	for(int i = 1;i <= n;i++)
	{
		sy[b[i]] = 0;
	}
	for(int i = 1;i <= n;i++)
	{
		if(a[i] == 1) sy[b[i]]++;
	}
	memset(zb,0,sizeof zb);
	for(int i = 1;i <= n;i++)
	{
		if(a[i] == 1)
		{
		  //cout << us[b[i]] << endl;
			if(sy[b[i]] <= us[b[i]] || (zb[b[i]] == 0 && us[b[i]] > 0))
			{
				zb[b[i]]++;
				us[b[i]]--;
				cout << "1 ";
			}
			
			else cout << "0 ";
			sy[b[i]]--;
		}
		else
		{
			zb[b[i]]--;
			if(zb[b[i]] < 0)
			{
			  printf("-1");
			  return 0;
			}
		}
	}
	return 0;
}

我要死啦!┏┛墓┗┓...(((m-__-)m

11个就是不对

2023/12/17 10:05
加载中...