Pagini recente » Cod sursa (job #1610556) | Cod sursa (job #900258) | Cod sursa (job #967671) | Cod sursa (job #285505) | Cod sursa (job #471897)
Cod sursa(job #471897)
using namespace std;
#include<iostream>
#include<fstream>
#include<cstring>
struct nod{
nod *ed[10];
int sub;
nod()
{
memset(ed,0,sizeof(ed));
sub=0;
}
};
#define Nmax 5003
typedef nod* trie;
trie pad[Nmax];
int N,nr;
char a[Nmax];
int sum;
char vector[5003];
ofstream fout("nums.out");
void insert(trie &n,int p)
{
if(p==nr)
{ n->sub=1;
return;
}
if(n->ed[a[p]-'0']==0)
n->ed[a[p]-'0']=new nod;
insert(n->ed[a[p]-'0'],p+1);
n->sub=0;
for(int i=0;i<=9;i++)
n->sub=(n->ed[i]==NULL)?n->sub:n->sub+n->ed[i]->sub;
}
void cauta(trie &n,int maximul,int p,int poz)
{
if(p==maximul)
{
return;
}
for(int i=0;i<=9;i++)
{
if(n->ed[i]!=NULL)
{sum+=n->ed[i]->sub;
if(sum>=poz)
{sum-=n->ed[i]->sub;
vector[p]=(char)'0'+i;
cauta(n->ed[i],maximul,p+1,poz);
break;
}
}
}
}
void query(int poz)
{ sum=0;
int i,j;
memset(vector,0,sizeof(vector));
for( i=0;i<=Nmax-2;i++)
{
sum+=pad[i]->sub;
if(sum>=poz)
{
sum-=pad[i]->sub;
cauta(pad[i],i,0,poz);
break;
}
}
for(j=0;j<i;j++)
fout<<vector[j];
fout<<"\n";
}
void cit()
{char control[4];
int i, poz;
ifstream fin("nums.in");
fin>>N;
fin.get();
for(i=1;i<=N;i++)
{fin.get(control,3);
if(control[0]=='1')
{fin.getline(a,Nmax);
nr=strlen(a);
insert(pad[nr],0);
}
else
{
fin>>poz;
fin.get();
query(poz);
}
}
}
int main()
{ for(int i=0;i<=Nmax-2;i++)
pad[i]=new nod;
cit();
fout.close();
return 0;
}