CHAMADA1

Run Settings
LanguageC
Language Version
Run Command
#include <stdio.h> #include <string.h> void troca(int* a,int* b) { int c=*a; *a=*b; *b=c; } int separa(int* v,int* v2,int l,int r) { int i=l+1,j=r; while(i<=j) { if(v[i]>v[l]&&v[j]<=v[l]) { troca(&v[i],&v[j]); troca(&v2[i],&v2[j]); } else if(v[i]>v[l]) j--; else if(v[j]<=v[l]) i++; else { i++; j--; } } troca(&v[j],&v[l]); troca(&v2[j],&v2[l]); return j; } void quicksort(int* v,int* v2,int l,int r) { if(l<r) { int p=separa(v,v2,l,r); quicksort(v,v2,l,p-1); quicksort(v,v2,p+1,r); } } void trocadefato(int* dic,int* indices,int n) { int i,aux[n]; for(i=0;i<n;i++) aux[i]=dic[indices[i]]; for(i=0;i<n;i++) dic[i]=aux[i]; } void stuck(char* palavras,int* dic,int n) { int aux[n],i,indices[n],l,r; for(i=0;i<n;i++) { aux[i]=(int)palavras[dic[i]]; i++; indices[i]=i; } quicksort(aux,indices,0,n-1); trocadefato(dic,indices,n); for(i=1;i<n;i++) { l=i-1; while(aux[i-1]==aux[i]) i++; r=i-1; if(l!=r) stuck(&palavras[1],&dic[l],r-l+1); } } int main(void) { int n,k,i,dic[n],id=0; dic[0]=0; scanf("%d %d",&n,&k); char palavras[21*n]; for(i=0;i<n;i++) { scanf(" %s",&palavras[dic[id]]); id++; dic[id]=dic[id-1]+strlen(&palavras[dic[id-1]])+1; } stuck(palavras,dic,n); printf("%s\n",palavras[k-1]); return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines