题目
题意
有n只青蛙,第i只青蛙可跳跃的距离为ai,起始位置从零开始
孩子们可在1-n的距离内放置陷阱,跳跃到此位置的青蛙都会掉入陷阱里面,问陷阱放在哪里可捕获最多的青蛙
思路
遍历,每次遍历因数,找到能捕获最多青蛙的陷阱
代码
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define lowbit(x) ((x)&(-(x)))
#define int long long
#define rep(i,a,b) for(int i=(int)a,i##i=(int)b;i<=i##i;i++)
#define per(i,a,b) for(int i=(int)a,i##i=(int)b;i>=i##i;i--)
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 1000005;
const double PI = acos(-1);
void solve()
{
int n,k;cin>>n;
map<int,int>mp;
vector<int>a(n+1);
for(int i=1;i<=n;i++){
cin>>k;mp[k]++;
}
for(auto[x,y]:mp)
for(int i=x;i<=n;i+=x)
a[i]+=y;
int ans=0;
for(auto &i:a)
if(i>ans) ans=i;
cout<<ans<<endl;
}
signed main()
{
std::ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int _ = 1;
cin>>_;
while(_--)
solve();
}