Cod sursa(job #1690608)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 15 aprilie 2016 12:57:39
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long i64;
typedef pair<i64, int> DAT;

i64 f[20];
int q[20];

int main(void){
    freopen("aperm.in","r",stdin);
    freopen("aperm.out","w",stdout);
    f[0]=1;

    vector<DAT> v;
    DAT tmp;
    int n,p,t;
    scanf("%d%d",&n,&p);
    for(int i=1; i<=p; ++i)
        f[i]=i*f[i-1];

    for(int i=1; i<=n; ++i){
        tmp.second=i;
        tmp.first=0;
        for(int j=0; j<p; ++j)
            scanf("%d",&q[j]);
        for(int j=0; j<p; ++j){
            tmp.first+=f[p-j]*(q[j]-1);
            for(int k=j+1; k<p; ++k)
                if(q[k]>q[j])
                    --q[k];
        }
        v.push_back(tmp);
    }
    sort(v.begin(), v.end());

    for(int i=0; i<v.size(); ++i)
        printf("%d\n",v[i].second);
    return 0;
}