int n,k,q;
struct tree
{
tree *next[12];
tree()
{
memset(next,NULL,sizeof(next));
}
}*root;
void add(char *s)
{
tree *p=root,*q;
for(int i=0;i<10;i++)
{
int id=s[i]-'0';
if(p->next[id]==NULL)
{
q=new tree();
p->next[id]=q;
p=p->next[id];
}
else p=p->next[id];
}
}
void query(char *s)
{
int t[15];
tree *p=root;
for(int i=0;i<10;i++)
{
int maxn=-1,f=-1;
for(int j=0;j<k;j++)
{
if(p->next[j])
{
int x=(j+s[i]-'0')%k;
if(x>maxn)
{
maxn=x;
f=j;
}
}
}
p=p->next[f];
t[i]=maxn;
}
int ff=0;
for(int i=0;i<10;i++)
{
if(t[i]!=0)ff=1;
if(ff==1)printf("%d",t[i]);
}
if(ff)printf("\n");
else printf("0\n");
}
void free(tree *t)
{
if(t==NULL)return ;
for(int i=0;i<10;i++)
{
if(t->next[i])free(t->next[i]);
}
delete(t);
}
int main()
{
scanf("%d%d",&n,&k);
root=new tree();
for(int i=0;i<n;i++)
{
char s[15],t[15];
scanf("%s",s);
int len=strlen(s);
len--;
for(int i=9;i>=0;i--)
{
if(len>=0)t[i]=s[len],len--;
else t[i]='0';
}
t[10]='\0';
//printf("%s\n",t);
add(t);
}
scanf("%d",&q);
while(q--)
{
char s[15],t[15];
scanf("%s",s);
int len=strlen(s);
len--;
for(int i=9;i>=0;i--)
{
if(len>=0)t[i]=s[len],len--;
else t[i]='0';
}
t[10]='\0';
//printf("%s\n",t);
query(t);
}
delete(root);
return 0;
}
07-31
463
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-06
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交