社区讨论

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

正在加载回复...