http://codeforces.com/contest/618/problem/B
给出一个矩阵表示 a[i] 和a[i]中较小的一个数,
让你还原数组a。。。。一顿乱搞。。。先确定一部分,再确定剩下的,最后还没确定就随便填
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include<stack>
using namespace std;
const double pi=acos(-1.0);
const double eps=1e-6;
const int inf=2147483647;
int tm[55][55];
int vis[55];
int main()
{
int i,j;
int n;
cin>>n;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
scanf("%d",&tm[i][j]);
}
}
queue<int > q;
for (i=1;i<=n;i++)
{
int tmp[55];
memset(tmp,0,sizeof(tmp));
for (j=1;j<=n;j++)
{
int x=tm[i][j];
tmp[x]++;
}
for (j=1;j<=n;j++)
{
if (tmp[j]>1)
{
vis[i]=j;
break;
}
}
}
int tmpans[100],ans[105];
memset(tmpans,0,sizeof(tmpans));
memset(ans,0,sizeof(ans));
int tmp_ok=0;
for (i=1;i<=n;i++)
{
tmpans[vis[i]]=1;
}
for (i=1;i<=n;i++)
{
if (tmpans[i]==0)
{
ans[++tmp_ok]=i;
}
}
for (i=1;i<=n;i++)
{
if (vis[i]==0)
{
vis[i]=ans[tmp_ok--];
}
}
for (i=1;i<=n;i++)
{
if (i!=1) printf(" ");
printf("%d",vis[i]);
}
printf("\n");
return 0;
}