社区讨论

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 条回复,欢迎继续交流。

正在加载回复...