We Were Both Childrent 题解

发布时间 2023-08-04 21:46:54作者: Dreamer_Boy

将一个好理解的方法。

题目说有 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;

结语

蒟蒻第一次打英文比赛,请多多指教。