Cod sursa(job #1413001)

Utilizator hrazvanHarsan Razvan hrazvan Data 1 aprilie 2015 18:01:02
Problema Ordine Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#define BAZA 26
#define MAXN 1000000
int fr[BAZA];
char s[MAXN + 1];

inline void next(int *p1, int p2){
  while(*p1 < BAZA && (fr[*p1] == 0 || *p1 == p2))
    (*p1)++;
}

int main(){
  FILE *in = fopen("ordine.in", "r");
  fgets(s, MAXN + 1, in);
  fclose(in);
  int i, dr = 0;
  for(i = 0; s[i] != '\n'; i++)
    fr[s[i] - 'a']++;
  int p1 = 0, p2 = 1;
  for(i = 0; s[i] != '\n'; i++){
    if(fr[p2] == 0)
      next(&p2, p1);
    if(fr[p1] == 0)
      next(&p1, p2);
    if(i & 1){
      s[dr] = p2 + 'a';
      dr++;
      fr[p2]--;
    }
    else{
      s[dr] = p1 + 'a';
      dr++;
      fr[p1]--;
    }
  }
  for(i = 0; i < BAZA; i++){
    if(fr[i] != 0){
      s[dr] = i + 'a';
      dr++;
    }
  }
  s[dr] = '\0';
  FILE *out = fopen("ordine.out", "w");
  fputs(s, out);
  fclose(out);
  return 0;
}