Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <assert.h>
- #include <unordered_map>
- #include <vector>
- #include <utility>
- #include <unordered_set>
- using namespace std;
- #define MAXN 100010
- int hang(int N, int C, int S[]) {
- //int pos_colori[C];
- vector<pair<int, int>> pos_colori;
- unordered_set<int> aggiunti;
- int numero_pile = 0;
- int cambiamenti = 0;
- for (int i = 0; i < N; i++) {
- //printf("Cambiamenti %d\n", cambiamenti);
- //printf("Cosetta %d\n", S[i]);
- // se il colore non c'�
- bool trovato = false;
- int posizione = 0;
- if (aggiunti.count(S[i]) > 0) {
- for (auto x : pos_colori) {
- if (x.first == S[i]) {
- posizione = x.second;
- trovato = true;
- break;
- }
- }
- }
- aggiunti.insert(S[i]);
- if (!trovato) {
- pos_colori.push_back({S[i], C-numero_pile-1});
- cambiamenti += numero_pile;
- numero_pile++;
- //printf("Nuova pila %d in %d\n", S[i], pos_colori[S[i]]);
- }
- else {
- //printf("Pila %d si trova in %d\n", S[i], pos_colori[S[i]]);
- int differenza = C - 1 - posizione;
- //printf("\tDifferenza %d\n", differenza);
- cambiamenti += differenza;
- }
- }
- return cambiamenti;
- }
- int S[MAXN];
- int main() {
- FILE *fr, *fw;
- int N, C, i;
- fr = fopen("input.txt", "r");
- fw = fopen("output.txt", "w");
- assert(2 == fscanf(fr, "%d %d", &N, &C));
- for(i=0; i<N; i++)
- assert(1 == fscanf(fr, "%d", &S[i]));
- fprintf(fw, "%d\n", hang(N, C, S));
- fclose(fr);
- fclose(fw);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement