三题,按现场排名应该是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; }