Cod sursă (job #243983)

Utilizator avatar Robert Popovici Robert Robert IP ascuns
Problemă Specsort (lot liceu) Compilator cpp | 1,26 kb
Rundă Arhiva de probleme Status evaluat
Dată 17 iul. 2016 21:38:31 Scor 10
#include <cstdio>
#include <cstring>
#define MAXN 50000
int v[MAXN+1],vec[MAXN+1];
int main(){
   FILE*fi,*fout;
   int i,n,flag,poz,nr,begin,end,m,aux;
   fi=fopen("specsort.in" ,"r");
   fout=fopen("specsort.out" ,"w");
   fscanf(fi,"%d" ,&n);
   for(i=1;i<=n;i++)
     fscanf(fi,"%d" ,&v[i]);
   flag=1;
   while(flag){
      i=1;
      while(i<=n&&v[i]==i)
         i++;
      if(i==n+1)
         flag=0;
      else{
         i=2;
         while(i<=n&&v[i]==v[i-1]+1)
           i++;
         if(v[i-1]==n)
            nr=v[1]-1;
         else
            nr=n;
         i=n;
         m=0;
         while(i>0){
            if(v[i]==nr){
               vec[++m]=nr;
               nr--;
            }
            i--;
         }
         begin=1;
         end=m;
         while(begin<end){
             aux=vec[begin];
             vec[begin]=vec[end];
             vec[end]=aux;
             begin++;
             end--;
         }
         poz=1;
         for(i=1;i<=n;i++){
             if(vec[poz]!=v[i])
                vec[++m]=v[i];
             else
                poz++;
         }
         memcpy(&v,&vec,sizeof(vec));
         for(i=1;i<=n;i++)
           fprintf(fout,"%d " ,v[i]);
         fprintf(fout,"\n");
      }
   }
   fclose(fi);
   fclose(fout);
   return 0;
}