Cod sursa(job #1952838)

Utilizator SenibelanMales Sebastian Senibelan Data 4 aprilie 2017 13:44:32
Problema Litere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <iostream>
#include <cstring>

using namespace std;

ifstream in("litere.in");
ofstream out("litere.out");

const int NMAX = 10005;
char sir[NMAX];
int v[NMAX];
int getting[NMAX];
int N, contor;

void Read(){
  in >> N;
  in.get();
  in.getline(sir, NMAX - 4);
  for(int i = 0; sir[i]; ++i){
    v[i] = sir[i];
    getting[i] = -1;
  }
  sort(v, v + N);
}

void Solve(){
  char c;
  char *p;
  for(int i = 0; i < N; ++i){
    c = v[i];
    p = strchr(sir, c);
    while(getting[p - sir] > -1)
      p = strchr(p + 1, c);
    getting[p - sir] = i;
  }
  for(int i = 0; i < N; ++i){
    if(getting[getting[i]] == i && getting[i] != i){
      swap(sir[i], sir[getting[i]]);
      swap(getting[i], getting[getting[i]]);
      contor++;
    }
  }
  for(int i = 0; i < N; ++i){
    if(getting[i] != i){
      swap(sir[i], sir[getting[i]]);
      swap(getting[i], getting[getting[i]]);
      contor++;
    }
  }
  out << contor << "\n";
}

int main(){
  Read();
  Solve();
  return 0;
}