BV-AV

· · 个人记录

BV转AV——bilibili

按着题目要求来就行了——U111425

#include <cstdio>
#include <string>
#include <cmath>
unsigned long long nun[12];
char ch[12];
int diff[29] = {-1,0,0,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1};

void Change_1(){
    for(int i = 2; i < 13; i++)
    {
        if(ch[i] == '1') nun[i] = 13; 
        if(ch[i] == '2') nun[i] = 12;
        if(ch[i] == '3') nun[i] = 46;
        if(ch[i] == '4') nun[i] = 31;
        if(ch[i] == '5') nun[i] = 43;
        if(ch[i] == '6') nun[i] = 18;
        if(ch[i] == '7') nun[i] = 40;
        if(ch[i] == '8') nun[i] = 28;
        if(ch[i] == '9') nun[i] = 5;
        if(ch[i] == 'A') nun[i] = 54;
        if(ch[i] == 'B') nun[i] = 20;
        if(ch[i] == 'C') nun[i] = 15;
        if(ch[i] == 'D') nun[i] = 8;
        if(ch[i] == 'E') nun[i] = 39;
        if(ch[i] == 'F') nun[i] = 57;
        if(ch[i] == 'G') nun[i] = 45;
        if(ch[i] == 'H') nun[i] = 36;
        if(ch[i] == 'J') nun[i] = 38;
        if(ch[i] == 'K') nun[i] = 51;
        if(ch[i] == 'L') nun[i] = 42;
        if(ch[i] == 'M') nun[i] = 49;
        if(ch[i] == 'N') nun[i] = 52;
        if(ch[i] == 'P') nun[i] = 53;
        if(ch[i] == 'Q') nun[i] = 7;
        if(ch[i] == 'R') nun[i] = 4;
        if(ch[i] == 'S') nun[i] = 9;
        if(ch[i] == 'T') nun[i] = 50;
        if(ch[i] == 'U') nun[i] = 10;
        if(ch[i] == 'V') nun[i] = 44;
        if(ch[i] == 'W') nun[i] = 34;
        if(ch[i] == 'X') nun[i] = 6;
        if(ch[i] == 'Y') nun[i] = 25;
        if(ch[i] == 'Z') nun[i] = 1;
        if(ch[i] == 'a') nun[i] = 26;
        if(ch[i] == 'b') nun[i] = 29;
        if(ch[i] == 'c') nun[i] = 56;
        if(ch[i] == 'd') nun[i] = 3;
        if(ch[i] == 'e') nun[i] = 24;
        if(ch[i] == 'f') nun[i] = 0;
        if(ch[i] == 'g') nun[i] = 47;
        if(ch[i] == 'h') nun[i] = 27;
        if(ch[i] == 'i') nun[i] = 22;
        if(ch[i] == 'j') nun[i] = 41;
        if(ch[i] == 'k') nun[i] = 16;
        if(ch[i] == 'm') nun[i] = 11;
        if(ch[i] == 'n') nun[i] = 37;
        if(ch[i] == 'o') nun[i] = 2;
        if(ch[i] == 'p') nun[i] = 35;
        if(ch[i] == 'q') nun[i] = 21;
        if(ch[i] == 'r') nun[i] = 17;
        if(ch[i] == 's') nun[i] = 33;
        if(ch[i] == 't') nun[i] = 30;
        if(ch[i] == 'u') nun[i] = 48;
        if(ch[i] == 'v') nun[i] = 23;
        if(ch[i] == 'w') nun[i] = 55;
        if(ch[i] == 'x') nun[i] = 32;
        if(ch[i] == 'y') nun[i] = 14;
        if(ch[i] == 'z') nun[i] = 19;
    }
}

void Change_2(){
    nun[2] *= 38068692544;
    nun[3] *= 3364;
    nun[4] *= 11316496;
    nun[5] *= 128063081718016;
    nun[6] *= 656356768;
    nun[7] *= 7427658739644928;
    nun[8] *= 195112;
    nun[9] *= 2207984167552;
    nun[10]*= 58;
}

unsigned long long SUM(){
    return nun[2] + nun[3] + nun[4] + nun[5] + nun[6] + nun[7] + nun[8] + nun[9] + nun[10] + nun[11]; 
}

void tentotwo(unsigned long long sum, int two[20]){
    int a = sum;
    for(int i = 1; a > 0; i++)
    {
        two[i] = a % 2;
        a /= 2;
    }
}

void finddiff(int a[29])
{
    for(int i = 1; i <= 29; i++)
    {
        if(a[i] == diff[i]) a[i] = 0;
        else a[i] = 1;
    }
}

int twototen(int a[29])
{
    int k = 0,sum = 0, i = 0;
    while(a[i] == 0)
    {
        i += 1;
    }
    for(int j = i; j < 29; j++)
    {
        if(a[k++] == 1) sum += (int)pow(2,j - 1);
    }
    return sum;
}

int main()
{
    scanf("%s", ch);
        Change_1();//转数字
        Change_2();//逐个*=
        unsigned long long sum = SUM() - 100618342136696320;//减去一个数
        int two[29] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
        tentotwo(sum, two);//十进制转二进制
        finddiff(two);//异或运算
        printf("AV%d",twototen(two));//二进制转十进制

    return 0;
}