Cod sursa(job #1153712)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 25 martie 2014 17:51:45
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<fstream>
#include<algorithm>
#include<vector>
#define INF (1<<27)
using namespace std;

struct Elem{int coloana;int contor;}Culorii[130];

vector <int> aparitiiC[130],aparitiiL[130];
int N,M,Maxim=INF,sol;

bool cmp(int i,int j) {
    return (i<j);
}

void citire() {

    ifstream in("trecere.in");
    int i,x,j;
    in>>M>>N;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++) {
            in>>x;
            aparitiiL[x].push_back(i);
            aparitiiC[x].push_back(j);
    }
    in.close();

}

void solve() {

    int i,j;
    for(i=1;i<=N;i++) {

        nth_element(aparitiiC[i].begin(),aparitiiC[i].begin()+ M/2,aparitiiC[i].end());
        Culorii[i].coloana=aparitiiC[i][M/2];
        for(j=0;j<M;j++){
            if(aparitiiC[i][j]>Culorii[i].coloana)
                Culorii[i].contor+=aparitiiC[i][j]-Culorii[i].coloana;
            else
                Culorii[i].contor+=-aparitiiC[i][j]+Culorii[i].coloana;

            if(aparitiiL[i][j]>j)
                Culorii[i].contor+=aparitiiL[i][j]-j;
            else
                Culorii[i].contor+=j-aparitiiL[i][j];
        }
        if(Culorii[i].contor<Maxim){
            sol=i;
            Maxim=Culorii[i].contor;
        }

    }

}

void afisare() {

    ofstream out("trecere.out");
    out<<Culorii[sol].contor<<' '<<sol<<' '<<Culorii[sol].coloana<<'\n';
    out.close();

}

int main() {

    citire();
    solve();
    afisare();
    return 0;

}