刚开始这样
#include<bits/stdc++.h>
using namespace std;
long long l[1000100],s[1000100];
int main()
{
long long n,m;
cin>>n>>m;
cin>>l[1]>>s[1];
for(int i=2;i<=n;i++){
l[i]=((l[i-1]*37011+10193)%10000)+1;
s[i]=((s[i-1]*73011+24793)%100)+1;
}
long long left=1,right=10000;
while(left+1<right){
long long mid=(left+right)/2;
long long cnt=0;
for(int i=1;i<=n;i++){
cnt+=(l[i]/mid*s[i]);
}
if(cnt>=m){
left=mid;
}else{
right=mid;
}
}
cout<<left;
return 0;
}
90分
#include<bits/stdc++.h>
using namespace std;
int l[10001],s[10001];
int n,m;
bool pd(int x){
int ans=0;
for(int i=1;i<=n;i++){
ans+=l[i]/x*s[i];
}
return ans>=m;
}
int main()
{
cin>>n>>m;
cin>>l[1]>>s[1];
for(int i=2;i<=n;i++){
l[i]=((l[i-1]*37011+10193)%10000)+1;
s[i]=((s[i-1]*73011+24793)%100)+1;
}
int left=0,right=100001;
while(left+1<right){
int mid=(left+right)/2;
if(pd(mid)){
left=mid;
}else{
right=mid;
}
}
cout<<left;
return 0;
}
换成函数计算就100了。