Living-Dream 周考总结 第4期

Posted on 2024-03-02 16:41  _XOFqwq  阅读(3)  评论(0编辑  收藏  举报

Link

T1

\(100\),没挂分。

依题计算即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	//freopen("as01.in","r",stdin);
	//freopen("as01.out","w",stdout);
	ios::sync_with_stdio(0);
	double a,b; cin>>a>>b;
	cout<<setprecision(2)<<fixed<<a-(int)(a/b)*b;
	return 0;
}

T2

\(100\),没挂分。

前缀和 + 断环成链。

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N=2e4+5;
int t,n,m;
int a[N],s[N];

signed main(){
	//freopen("as02.in","r",stdin);
	//freopen("as02.out","w",stdout);
	ios::sync_with_stdio(0);
	cin>>t;
	while(t--){
		cin>>n>>m;
		for(int i=1;i<=n;i++) cin>>a[i];
		for(int i=n+1;i<=2*n;i++) a[i]=a[i-n];
		memset(s,0,sizeof(s));
		for(int i=1;i<=2*n;i++) s[i]=s[i-1]+a[i];
		int ans=-1e9,pos=0;
		for(int i=1;i<=n;i++)
			if(ans<s[i+m-1]-s[i-1])
				ans=s[i+m-1]-s[i-1],pos=i;
		cout<<ans<<' '<<pos<<'\n';
	}
	return 0;
}

T3

\(100 \to 27\),错因:思路错误。

考虑到指导总时间具有单调性,上二分答案。

check 时,对于当前答案 \(x\),计算每位老师能指导的人数之和是否 \(\ge m\)

对于总时间 \(l\),我们计算出直到 \(l-2\) 时刻每位老师能指导的人数之和 \(last\)

顺次枚举每位老师,若其在 \(l-1\) 时刻存在空闲,则将其安排给第 \(m\) 个人即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N=1e5+5;
int n,m;
int a[N];

bool check(int x){
	int cnt=0;
	for(int i=1;i<=n;i++) cnt+=(x-1+a[i])/a[i];
	return cnt>=m;
}

signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	int l=0,r=m*100000ll;
	while(l<r){
		int mid=(l+r)>>1;
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	int last=0,ans=0;
	for(int i=1;i<=n;i++) last+=(l-2+a[i])/a[i];
	for(int i=1;i<=n;i++){
		if((l-1)%a[i]==0){
			last++;
			if(last==m){ ans=i; break; }
		}
	}
	cout<<ans;
	return 0;
}

总结:

  • \(300 \to 227,rk4\)。/fn

  • 对于自己想出来的思路要求证。