zoukankan      html  css  js  c++  java
  • 【CF-1358 D. The Best Vacation】 贪心

    D. The Best Vacation

    题意

    某个地方,一年有(n)个月,第(i)月有(a_i)天,现在要选择一个长度为x的假期,

    如果某天是某月的第(i)天,那么他的价值就是(i),求价值最大的假期。

    题解

    假期的最后一天一定是某个月的结尾,直接枚举。

    PS:

    我想的是假期的第一天或者最后一天一定是某个月的结尾,写的麻烦了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+10;
    typedef long long ll;
    typedef unsigned long long ull;
    
    ll arr[N*2],pre[N*2],val[N*2];
    int main()
    {
        int n;
        ll x;
        scanf("%d%lld",&n,&x);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&arr[i]);
            arr[i+n]=arr[i];
        }
        for(int i=1;i<=2*n;i++)
        {
            pre[i]=pre[i-1]+arr[i];
            val[i]=val[i-1]+(arr[i]+1)*arr[i]/2;
        }
        ll ans=0;
        for(int l=1,i=1+n;i<=2*n;i++)
        {
            while(pre[i]-pre[l]>x) l++;
            ll now=val[i]-val[l];
            ll rel=x-pre[i]+pre[l];
            now+=(arr[l]+arr[l]-rel+1)*rel/2;
            ans=max(ans,now);
        }
        printf("%lld
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    Linux文件查询笔记
    C语言学习和回顾
    hive的数据压缩
    进程线程那些事儿
    hive的数据存储格式
    hive的内置函数
    Hive自定义函数
    spark编译
    Impala的安装和使用
    数据库的读写分离
  • 原文地址:https://www.cnblogs.com/valk3/p/12978849.html
Copyright © 2011-2022 走看看