三题,按现场排名应该是80名,铜牌靠后。

几次训练发现自己的心理素质实在是太!差!了!一开始,老规矩,我k题,zrA题,ysB题。

A题大模拟,比较费时,zr先看了过了几个人的H,31mins,1A

B题过的人越来越多,我看了N久终于看懂K题……不会做……我去问ys怎么样,他说了下题意,我觉得很水的暴力,让他直接写,他一直在和我讲说复杂度不够。我有点不耐烦,直接上机写。写的过程中出了点小问题,不过还是水题,一个小时左右1A

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <iostream>
using namespace std;
typedef long long ll;

const int N = 1000005;
const int INF = 0x5f5f5f5f;
const int MOD = 1000000007;

ll cal(int x, int m) {
    ll ans = 0;
    int f = m;
    while (x) {
        int z = x%m;
        ans += z*z;
        x /= m;
    }
    return ans;
}

void output(ll x, int m) {
    char ans[100]; int idx = 0;
    while (x) {
        int z = x%m;
        if (z < 10) ans[idx++] = z + '0';
        else ans[idx++] = z - 10 + 'A';
        x /= m;
    }
    for (int i = idx-1; i >= 0; --i) printf("%c", ans[i]); printf("\n");
}

void solve(int n, int m) {
    ll ans = 0;
    int lit = sqrt(n);
    for (int i = 1; i <= lit; ++i) {
        if (n % i == 0) {
            ans += cal(i, m);
            if (i != n/i) ans += cal(n/i, m);
        }
    }
    output(ans, m);
}

int main() {
    //freopen("in.txt", "r", stdin);
    int n, m;
    while (~scanf("%d%d", &n, &m)) {
        solve(n, m);
    }
    return 0;
}
View Code

相关文章: