USACO 2011 December Contest
Silver Division
Problem 1. CowPhotography
首先我们可以发现:若在大于等于3张照片中a牛都在b牛的前面,那么在初始状态中a牛就在b牛前面。
于是我们可以记下每张照片中每头牛的位置,然后在sort中加一个神奇的cmp函数(若a牛在2张以上的照片中在b牛前,返回1,否则返回0)
代码如下:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0;char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
map<int,int> a[6];
int b[20001];
inline bool cmp(int x,int y){
int s=0;
for(int i=1;i<=5;++i) s+=a[i][x]<a[i][y];
return s>2;
}
int main()
{
//freopen("photo.in","r",stdin);
//freopen("photo.out","w",stdout);
int n=read();
for(int i=1;i<=5;++i)
for(int j=1;j<=n;++j){
int x=read();
a[i][x]=j;
if(i<2) b[j]=x;
}
sort(b+1,b+n+1,cmp);
for(int i=1;i<=n;++i) printf("%d\n",b[i]);
}