USACO2.1 Sorting a Three-Valued Sequence (sort3)

1160 ワード

cABをA位置のBの数とすると、c 21+c 31+(c 21>c 12?c 23+c 21-c 12:c 32+c 12-c 21)となる.
 
/*
ID:jzzlee1
PROG:sort3
LANG:C++
*/
#include<iostream>
#include<fstream>
#include<cmath>
#include<vector>
#include<set>
using namespace std;
ifstream fin("sort3.in");
ofstream fout("sort3.out");
int main()
{
	int n;
	//cin>>n;
	fin>>n;
	int i,a,ans=0;
	vector<int> vec;
	vector<int>::iterator it1;
	multiset<int> set1;
	multiset<int>::iterator it2;
	for(i=0;i!=n;++i)
	{
		//cin>>a;
		fin>>a;
		vec.push_back(a);
		set1.insert(a);
	}
	int c12=0,c13=0,c21=0,c23=0,c31=0,c32=0;//cab   a    b   
	for(it1=vec.begin(),it2=set1.begin();it1!=vec.end()&&it2!=set1.end();++it1,++it2)
	{
		if(*it1!=*it2)
		{
			if(*it2==1)
			{
				if(*it1==2) c12++;
				if(*it1==3)	c13++;
			}
			if(*it2==2)
			{
				if(*it1==1) c21++;
				if(*it1==3) c23++;
			}
			if(*it2==3)
			{
				if(*it1==1) c31++;
				if(*it1==2) c32++;
			}
		}
	}
	ans=c21+c31+(c21>c12?c23+c21-c12:c32+c12-c21);
	//cout<<ans<<endl;
	fout<<ans<<endl;
	return 0;
}