社区讨论
10pts,求调
P1069[NOIP 2009 普及组] 细胞分裂参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m0pdm5pa
- 此快照首次捕获于
- 2024/09/05 22:22 2 年前
- 此快照最后确认于
- 2025/11/04 21:42 4 个月前
代码:
CPP#include <bits/stdc++.h>
using namespace std;
int n, m1, m2, s[10010], prime[30010], cnt, temp, maxn, minn = 1e9, flag, tempo, flagg;
struct num
{
int p, t;
}a[10010][50];
void init()
{
for (int i = 2; i <= 30000; i++)
{
for (int j = 2; j * j <= i; j++) if (i % j == 0) {prime[i] = 0; break;}
}
}
void getnum(int x)
{
temp = s[x], cnt = 0;
for (int i = 2; i * i <= s[x]; i++) while (temp % i == 0 and prime[i]) {a[x][++cnt].p = i; temp /= i; a[x][++cnt].t++;}
}
int main()
{
cin >> n >> m1 >> m2;
init();
if (m1 == 1) {cout << 0; return 0;}
s[0] = m1;
getnum(0);
for (int x = 1; x <= n; x++) for (int i = 1; a[x][i].p != 0; i++) a[x][i].t *= m2;
for (int i = 1; i <= n; i++) {cin >> s[i]; getnum(i);}
for (int i = 1; i <= n; i++)
{
maxn = 0;
flagg = 1;
for (int j = 1; a[0][j].p != 0; j++)
{
flag = 0;
for (int k = 1; a[i][k].p != 0; k++) if (a[i][k].p == a[0][j].p) {flag = 1; tempo = a[i][k].t; break;}
if (not flag) {flagg = 0; break;}
maxn = max(ceil(1.0 * a[0][j].t / tempo), maxn * 1.0);
}
if (flagg) minn = min(minn, maxn);
}
if (minn == 1e9) cout << -1;
else cout << minn;
return 0;
}
评测结果:
![评测结果]()
回复
共 1 条回复,欢迎继续交流。
正在加载回复...