Submission #131380


Source Code Expand

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
#define SIZE 100005

using namespace std;
typedef long long int ll;
typedef pair <int,int> P;

struct BIT
{
	int bit[SIZE];
	int n;
	
	void init(int _n)
	{
		memset(bit,0,sizeof(bit));
		n=_n;
	}
	void add(int k,int x)
	{
		while(k<=n)
		{
			bit[k]+=x;
			k+=k&-k;
		}
	}
	int sum(int k)
	{
		int ret=0;
		while(k>0)
		{
			ret+=bit[k];
			k-=k&-k;
		}
		return ret;
	}
};
BIT bit;
vector <int> vec[SIZE];
bool use[SIZE];

ll solve(int v,int n)
{
	bit.init(n+2);
	int bef=-1,now=v;
	ll ret=0;
	int cnt=0;
	bool up=true;
	while(up)
	{
		use[now]=true;
		ret+=(ll) bit.sum(now+1);
		bit.add(now+1,1);
		cnt++;
		up=false;
		for(int i=0;i<vec[now].size();i++)
		{
			if(vec[now][i]!=bef)
			{
				int to=vec[now][i];
				bef=now;
				now=to;
				up=true;
				break;
			}
		}
	}
	ll all=(ll) cnt*(ll) (cnt-1)/2;
	return min(all-ret,ret);
}
long long best_swap(int n, int m,int E[][2])
{
	vector <P> in;
	for(int i=0;i<m;i++)
	{
		int l=E[i][0],r=E[i][1];
		if(l>r) swap(l,r);
		in.push_back(P(l,r));
	}
	sort(in.begin(),in.end());
	for(int i=0;i<m;i++)
	{
		if(i>0&&in[i]==in[i-1]) continue;
		int l=in[i].first,r=in[i].second;
		vec[l].push_back(r);
		vec[r].push_back(l);
	}
	for(int i=0;i<n;i++) if(vec[i].size()>2) return -1;
	ll ret=0;
	for(int i=0;i<n;i++)
	{
		if(!use[i]&&vec[i].size()==1)
		{
			ret+=solve(i,n);
		}
	}
	for(int i=0;i<n;i++) if(!use[i]&&vec[i].size()==2) return -1;
	return ret;
}

Submission Info

Submission Time
Task A - 国際道迷いオリンピック(International Michimayoi Olympic)
User yutaka1999
Language IOI-Style C++ (GCC 5.4.1)
Score 100
Code Size 1619 Byte
Status AC
Exec Time 671 ms
Memory 9872 KB

Judge Result

Set Name Subtask1 Subtask2 Subtask3
Score / Max Score 10 / 10 44 / 44 46 / 46
Status
AC × 7
AC × 13
AC × 22
Set Name Test Cases
Subtask1 subtask1/1, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7
Subtask2 subtask1/1, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7, subtask2/1, subtask2/2, subtask2/3, subtask2/4, subtask2/5, subtask2/6
Subtask3 subtask1/1, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7, subtask2/1, subtask2/2, subtask2/3, subtask2/4, subtask2/5, subtask2/6, subtask3/1, subtask3/2, subtask3/3, subtask3/4, subtask3/5, subtask3/6, subtask3/7, subtask3/8, subtask3/9
Case Name Status Exec Time Memory
subtask1/1 AC 27 ms 3484 KB
subtask1/2 AC 26 ms 3440 KB
subtask1/3 AC 25 ms 3492 KB
subtask1/4 AC 26 ms 3496 KB
subtask1/5 AC 26 ms 3556 KB
subtask1/6 AC 26 ms 3484 KB
subtask1/7 AC 25 ms 3100 KB
subtask2/1 AC 28 ms 3744 KB
subtask2/2 AC 39 ms 4380 KB
subtask2/3 AC 82 ms 7064 KB
subtask2/4 AC 100 ms 8216 KB
subtask2/5 AC 123 ms 8216 KB
subtask2/6 AC 101 ms 8216 KB
subtask3/1 AC 53 ms 4508 KB
subtask3/2 AC 55 ms 5020 KB
subtask3/3 AC 494 ms 5404 KB
subtask3/4 AC 671 ms 6168 KB
subtask3/5 AC 105 ms 7820 KB
subtask3/6 AC 663 ms 8856 KB
subtask3/7 AC 551 ms 9748 KB
subtask3/8 AC 173 ms 9872 KB
subtask3/9 AC 26 ms 3236 KB