8月集训 DAY6

🎉️超速罚单

😄错误原因

🚀️思路

得到每一公里的限速和速度,找其中的超速的最大值

代码

#include<bits/stdc++.h>
using namespace std;
int ans,a[110],b[110],c[110],d[110],sum[110],sum2[110];	
int n,m;
int main()
{
	freopen("speeding.in","r",stdin);
	freopen("speeding.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i]>>b[i];
		sum2[i]=sum2[i-1]+a[i];
	}
	for(int i=1;i<=m;i++) 
	{
		cin>>c[i]>>d[i];
		sum[i]=sum[i-1]+c[i];
	}
	for(int i=1,j=1,k=1;i<=100;i++)
	{
		if(sum[k]<i) k++;
		if(i>sum2[j]) j++;
		ans=max(ans,(d[k]-b[j]));
	}
	cout<<ans;
}

😕自助饮料

错误的原因

有细节没考虑

思路

我们直接模拟每一秒 用t来存储,用i来现在最大的的扔 每次t++并将从1到m的每个不是0的a[j]-- 如果是0了 我们让i++ 用a[i]接替a[j] 最后如果都是0就 break 输出t

代码

#include<bits/stdc++.h>
using namespace std;
const int tt=1e555+10;
long long i,ans,a[tt];
int main()
{
	freopen("drink.in","r",stdin);
	freopen("drink.out","w",stdout);
	int n,m;
	cin>>n>>m;
	for(int j=1;j<=n;j++) cin>>a[j];
	i=m;
	while(++ans)
	{	
		for(int j=1;j<=m;j++)
		{
			if(a[j]!=0) a[j]--;
			if(a[j]==0)
			{
				a[j]=a[++i];
			}
		}
		bool flag=0;
		flag=0; 
		for(int j=1;j<=m;j++)
		{
			if(a[j]) 
			{
				flag=1;
			}
		}
		if(flag==0) break;
	}
	cout<<ans;
}

三国游戏

思路没想到的原因

认为这题太难了,只专注于第三题

思路

因为计算机会破坏你取的最大值,所以只能取次大值,因为它只会其最大值的武将所以你一定能取到次大值,再到最大的即可

代码

#include<bits/stdc++.h>
using namespace std;
int a[510][510],maxn,max_maxn,maxx;
int main()
{

        freopen("sg.in","r",stdin);
	freopen("sg.out","w",stdout);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			cin>>a[i][j];
			a[j][i]=a[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		maxn=0;
		maxx=0;
		for(int j=1;j<=n;j++)
		{
			if(j==i) continue;
			maxx=max(maxx,a[i][j]);
		}
		for(int j=1;j<=n;j++)
		{
			if(j==i||a[i][j]==maxx) continue;
			maxn=max(maxn,a[i][j]);
		}
		max_maxn=max(max_maxn,maxn);
	}
	cout<<1<<endl; 
	cout<<max_maxn;
 	return 0; 
}