社区讨论
Help me
P1050[NOIP 2005 普及组] 循环参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m42wrrks
- 此快照首次捕获于
- 2024/11/29 23:38 去年
- 此快照最后确认于
- 2025/11/04 13:38 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
char s[102];
int k, m, n[102], r[102], p[102], l[102], q[102], tmp[102];
inline void mul(int a[], int b) {
for (int i = 1; i <= k; i++)
a[i] *= b;
for (int i = 1; i <= k; i++) {
a[i + 1] += a[i] / 10;
a[i] %= 10;
}
}
inline void mul(int a[], int b[]) {
for (int i = 1; i <= k; i++)
for (int j = 1; j <= k; j++)
tmp[i + j - 1] += a[i] * b[j];
for (int i = 1; i <= k; i++) {
tmp[i + 1] += tmp[i] / 10;
tmp[i] %= 10;
a[i] = tmp[i];
}
}
int main() {
scanf("%s%d", s + 1, &k);
m = strlen(s + 1);
for (int i = 1; i <= m; i++)
n[i] = s[m - i + 1] - '0';
l[1] = 1;
for (int i = 1; i <= k; i++)
q[i] = n[i];
for (int i = 1; i <= k; i++) {
bool flag = false;
memset(r, 0, sizeof(r));
for (int j = 1; j <= k; j++)
p[j] = n[j];
r[1] = 1;
for (int j = 1; j <= 10; j++) {
mul(p, q);
mul(r, q);
if (p[i] == n[i]) {
flag = true;
mul(l, j);
for (int u = 1; u <= k; u++)
q[u] = r[u];
break;
}
}
if (!flag) {
puts("-1");
return 0;
}
}
while (!l[k])
k--;
for (int i = k; i; i--)
printf("%d", l[i]);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...