将一个好理解的方法。
题目说有 n 只青蛙,每只青蛙初始都在 0 位置,每秒会往前跳 a_i。你可以在位置 1 到 n 设置一个陷阱,陷阱会抓住经过它的所有青蛙,求你最多能抓住多少青蛙。
很简单,只要枚举质因数并判断是否合法即可。
int n, ans = 0;
cin >> n;
memset(cnt, 0, sizeof cnt);
for (int i = 1, x; i <= n; ++i)
{
cin >> x;
if (x <= n)cnt[x]++;
}
for (int i = 1; i <= n; ++i)
{
int s = 0;
for (int j = 1; j * j <= i; ++j)
{
if (i % j == 0)
{
s += cnt[j];
if (j * j != i)
s += cnt[i / j];
}
}
ans = max(ans, s);
}
cout << ans << endl;
结语
蒟蒻第一次打英文比赛,请多多指教。
标签:Both,Childrent,cnt,int,题解,青蛙,Were From: https://www.cnblogs.com/DreamerBoy/p/17607103.html