Quick actions

cmd+k|ctrl+k

Navigation

Languages

CHAMADA1

Snippet info

Language

C

Visibility

public

Author

jungs

Created

2018-10-17T18:17:03Z

Updated

2018-10-25T15:07:47Z

#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;
}
INFO