Pagini recente » Cod sursa (job #2925669) | Cod sursa (job #2282759) | Cod sursa (job #850691) | Cod sursa (job #1494634) | Cod sursa (job #329458)
Cod sursa(job #329458)
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;
#define Lmax 100010
int lenmax, j, k, n, i, tip, len, ok, n1, l;
char cuv[Lmax], nr[Lmax];
FILE *g = fopen("nums.out", "w");
struct trie {
int nr;
trie *fiu[10];
trie() {
nr = 0;
memset(fiu, 0, sizeof(fiu));
}
};
void add (trie *nod, int i){
if( i >= lenmax ) { nod->nr++ ; return ;}
if( !nod->fiu[ cuv[i] - '0' ] )
nod->fiu[ cuv[i] - '0' ] = new trie;
add(nod->fiu[ cuv[i] - '0' ] , i + 1);
nod->nr++;
}
void query (trie *nod, int i){
if(i >= lenmax) { return ;}
for(j = 0; j <= 9; j++){
if( nod->fiu[j] ){
if( nod->fiu[j]->nr < k)
k-= nod->fiu[j]->nr;
else{
if(j) ok = 1;
if(ok){fprintf(g,"%d", j);}
query( nod->fiu[j], i + 1);
}
}
}
}
int main(){
FILE *f = fopen("nums.in", "r");
fscanf(f,"%d", &n);
for(i = 1; i <= n; i++){
fscanf(f,"%d ", &tip);
fscanf(f,"%s", nr);
if(tip){
len = strlen(nr);
if( lenmax < len ) lenmax = len;
}
}
fclose(f);
FILE *ff = fopen("nums.in", "r");
fscanf(ff,"%d", &n);
trie *R = new trie;
for(i = 1; i <= n; i++){
fscanf(ff,"%d ", &tip);
ok = 0;
if(tip){
fscanf(ff,"%s", nr);
n1 = lenmax - strlen(nr);
for(j = 0; j < n1 ; j++)
cuv[j] = '0';
for( l = 0 ; j <=lenmax; j++, l++)
cuv[j] = nr[l];
add(R, 0);
}
else{
fscanf(f,"%d", &k);
query(R, 0);
fprintf(g,"\n");
}
}
fclose(ff);
fclose(g);
return 0;
}