A题 转换AV号(avtobv)
Description
最近某视频网站将使用已久的 av 视频编号升级成了新的 bv 号,新的编号扩充了编号的字符集,增加了编号的数量。
你是网站的忠实用户,这次升级迫使你将收藏的视频 av 号重新换算成 bv 号以便观看。由于原始算法比较复杂,我们将算法简化如下:
av 号以av开头,之后跟随一串数字,例如av84735341;而 bv 号以BV开头,之后跟随一串数字和字母,例如BV1i7411a794。
首先,需要将 av 号中的正整数nn异或上一个较大的正整数XX,再对其进行编码,得到编码后的串SS,最后在SS开头添加BV前缀即可。
这里所使用的编码是指把一个整数转换成一个 62 进制数,并用编码表中指定的每一位代表的符号作为该位的字符,构成编码后的串。
你的收藏中有nn个 av 号,每个 av 号都符合上面的格式。现在你已经获得了异或的正整数XX和编码的编码表(每次使用的XX和编码表可能不同),请你将 av 号转换为 bv 号并输出。
你可以参考样例解释来帮助理解上面的流程。
注:题目纯属虚构,上述算法不一定与真实情况中的编码算法相同。
Input
第一行包含两个正整数 n (1≤n≤10^4 ) 和 X (1≤X≤10^18 ),代表 av 号的数量和异或的值。第二行包含一个长为 62 的字符串 T,T
表示编码时某一位的十进制数值为 i 时对应的编码字符。T 仅包含英文字母及数字。接下来 n 行每行包含一个字符串,分别为要转换的 av 号串,长度不超过 11。
Output
输出 n 行,每行为转换后得到的 bv 号。
Sample Input 1
5 10
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
av1
av2
av314
av17001
av84735341
Sample Output 1
BVb
BV8
BV4U
BV4q7
BV5JxwX
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,j,m;
long long a,x;
char b[63];
scanf("%d %d",&n,&x);
scanf("%s",&b[i]);
getchar();
for(i=0;i<n;i++)
{
int c[100000];
j=0;
getchar();
getchar();
scanf("%d",&a);
getchar();
a=a^x;
while(a)
{
int a1=a%62;
a=a/62;
c[j]=a1;
j++;
}
printf("BV");
for(j=j-1;j>=0;j--)
{
a=c[j];
printf("%c",b[a]);
}
getchar();
}
}