警钟敲炸
查看原帖
警钟敲炸
1240139
ptxy2352010111楼主2024/9/15 20:57

刚开始这样

#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了。

2024/9/15 20:57
加载中...