有 个在 中均匀随机的整数随机变量 ,求一个最大的 满足找不出:
- 一组非负整数 满足 。
满足有解。
,。
设 ,考虑以 为模跑同余最短路,则 都能被表示出来,所以答案为 。
由于数据随机,所以 的期望为 ,同余最短路时间复杂度为 但是跑不满,所以能过。
代码如下:
#include <iostream>
#include <cstdio>
#include <random>
#include <queue>
using namespace std;
const int S=10000005,MS=2000005;
int n,m,seed,a[S];
int dis[MS];
bool vis[MS];
priority_queue<pair<int,int>> q;
int main()
{
scanf("%d%d%d",&n,&m,&seed);
mt19937 rng(seed);
auto get=[&]()
{
uniform_int_distribution<int> qwq(2,m);
return qwq(rng);
};
int mn=m;
for(int i=1;i<=n;i++) mn=min(mn,a[i]=get());
for(int i=0;i<mn;i++) dis[i]=1e9;
dis[0]=0;
q.push(make_pair(0,0));
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(vis[u]) continue;
vis[u]=true;
for(int i=1;i<=n;i++)
{
int v=(u+a[i])%mn;
if(dis[u]+a[i]<dis[v])
{
dis[v]=dis[u]+a[i];
q.push(make_pair(-dis[v],v));
}
}
}
int ans=0;
for(int i=0;i<mn;i++) ans=max(ans,dis[i]-mn);
printf("%d\n",ans);
return 0;
}