算号代码获取

还有东西要加入,你先别急

typedef unsigned long long u64_t;
typedef unsigned char u8_t;
const int N=256;
const int skill_cnt=40;
struct Name
{
    u8_t val[N],ual[N],val_base[N],val_base2[N];
    u8_t name_base[M], freq[16], skill[skill_cnt], p, q;
    int prop[8];
    int q_len,V,seed;
    u8_t m()
    {
        q += val[++p];
        swap(val[p], val[q]);
        return val[val[p] + val[q] & 255];
    }
    int gen()
    {
        int u = m();
        return (u << 8 | m()) % skill_cnt;
    }
    void load_team(char *_team)
    {
        int t_len = strlen(_team)+1;
        u8_t s;
        for (int i = 0; i < N; i++) val_base[i] = i;
        for (int i = s = 0; i < N; ++i)
        {
            if (i % t_len)
                s += _team[i % t_len - 1];
            s += val_base[i];
            swap(val_base[i], val_base[s]);
        }
    }
    void load_name(const char *name)
    {
        memcpy(val, val_base, sizeof val);
        q_len = -1;
        u8_t s;
        int t_len=strlen(name)+1;
        for (int _ = 0; _ < 2; _++)
            for (int i = s = 0; i < N; i++)
            {
                if (i % t_len) s += name[i % t_len - 1];
                s += val[i];
                swap(val[i], val[s]);
            }
        for (int i = 0; i < N; i += 8)
            ual[i] = val[i] * 181 + 160;
        for (int i = 0; i < N; i ++)
            if (ual[i] >= 89 && ual[i] < 217)
                name_base[++q_len] = ual[i] & 63;
        prop[1] = median(name_base[10], name_base[11], name_base[12]);
        prop[2] = median(name_base[13], name_base[14], name_base[15]);
        prop[3] = median(name_base[16], name_base[17], name_base[18]);
        prop[4] = median(name_base[19], name_base[20], name_base[21]);
        prop[5] = median(name_base[22], name_base[23], name_base[24]);
        prop[6] = median(name_base[25], name_base[26], name_base[27]);
        prop[7] = median(name_base[28], name_base[29], name_base[30]);
        sort(name_base, name_base + 10);
        prop[0] = (154 + name_base[3] + name_base[4] + name_base[5] + name_base[6])/ 3;
    }
    void calc_skills(const char *name)
    {
        q_len=-1;
        for (int i = 0; i < N; i += 8)
            ual[i] = val[i] * 181 + 160;
        for (int i = 0; i < N; i ++)
            if (ual[i] >= 89 && ual[i] < 217)
                name_base[++q_len] = ual[i] & 63;

        u8_t *a = name_base + K;
        for (int i = 0; i < skill_cnt; i ++) skill[i] = i;
        memset(freq, 0, sizeof freq);
        p = q = 0;
        for (int s = 0, _ = 0; _ < 2; _ ++)
            for (int i = 0; i < skill_cnt; i ++) {
                s = (s + gen() + skill[i]) % skill_cnt;
                swap(skill[i], skill[s]);
            }
        int last = -1;
        for (int i = 0, j = 0; i < K; i += 4, j ++) {
            u8_t p = min({a[i], a[i + 1], a[i + 2], a[i + 3]});
            if (p > 10 && skill[j] < 35) {
                freq[j] = p - 10;
                if (skill[j] < 25) last = j;
            }
            else freq[j] = 0;
        }
        if (last != -1) freq[last] <<= 1;
        if (freq[14] && last != 14)
            freq[14] += min({name_base[60], name_base[61], freq[14]});
        if (freq[15] && last != 15)
            freq[15] += min({name_base[62], name_base[63], freq[15]});
    }
};