每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

Good Bye 2021: 2022 is NEAR D

Good Bye 2021: 2022 is NEAR D

这次虽然做了三个(但是C是后来自己看了其他人的代码才发现的问题)

下次一定要double 的判断大小一定要以x-y<=1e-10这种形式,不能直接和int型一样的判断(C我就是错在这儿了)

D

D

这个我又看错题意了,这个题的大意是我们需要很多段,每一段的任意l到r的和都要大于等于(r-l+1)x,最后求出这些段的总和最大的(我理解成了只要一段,求最长的一段)

然后这一个我们是找不可以的,然后n-ans

有哪几种是不可能的呢

1.如果选择两个ai和ai+1是小于2*x,那么这个i+1一定是不可以存在那些子段里面的(因为要任意l,r都要满足和大于等于(r-l+1)x)那我们ans++,跳过i+1

2,如果ai+ai+1+ai+2小于3*x,那么ai+2一定是不可以存放在子段里,ans++,跳过i+2(到了第二个判断,一定是前一个没有满足的,那么ai+ai+1一定是大于2x的)

我们不需要一定要a[i]>=x是因为题目要求l和r不可以相等

具体实现看代码

#include <iostream>
using namespace std;
const int maxn=50000+10;
int t,n,x;
int a[maxn];
void solve()
{
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    cin>>x;
    int ans=0;
    for (int i=1;i<=n;i++)
    {
        if (i+1<=n&&(a[i]+a[i+1])<2*x)
        {
            i++;
            ans++;
        }
        else if (i+2<=n&&(a[i]+a[i+1]+a[i+2]<3*x))
        {
            i+=2;
            ans++;
        }
    }
    ans=n-ans;
    cout<<ans<<'\n';
    return ;
}
int main ()
{
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

这个还有dp,不过我懒的去找了,就用这个吧

posted @   righting  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示