- 阳子墨 的博客
8月集训 DAY6
- @ 2024-8-6 19:15:21
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;
}