首页 > 其他分享 >CF 1994 C. Hungry Games (*1600) 思维+二分

CF 1994 C. Hungry Games (*1600) 思维+二分

时间:2024-09-02 23:25:42浏览次数:13  
标签:const 1994 int 1600 CF Hungry vector define

CF 1994 C. Hungry Games (*1600) 思维+二分

题目链接

题意

给你一个长度为 \(n\) 的关卡,和一个正整数 \(x\),初始分数为 \(0\),通过每个关卡就会获得对应的分数。

但是分数如果超过 \(x\),就会清零。现在让你求出满足最终得分不为零的所有子区间数量。

思路

正难则反,改求最终得分为零的所有子区间数量。考虑维护前缀和数组,然后枚举左端点。

每次在前缀和数组中查询对应的右端点即可。

代码

#include<bits/stdc++.h>

using namespace std;

#define ff first
#define ss second
#define pb push_back
#define all(u) u.begin(), u.end()
#define endl '\n'
#define debug(x) cout<<#x<<":"<<x<<endl;

typedef pair<int, int> PII;
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10, M = 105;
const int mod = 1e9 + 7;
const int cases = 1;

void Showball(){
   int n,x;
   cin>>n>>x;
   vector<int> a(n);
   vector<LL> s(n+1);
   for(int i=0;i<n;i++){
     cin>>a[i];
     s[i+1]=s[i]+a[i];
   }
   LL ans=1LL*n*(n+1)/2;
   vector<int> f(n+1);
   for(int i=n-1;i>=0;i--){
    auto p=lower_bound(all(s),s[i]+x+1)-s.begin();
    f[i]=(p==n+1?0:f[p]+1);
    ans-=f[i];
   }
   cout<<ans<<endl;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T=1;
    if(cases) cin>>T;
    while(T--)
    Showball();
    return 0;
}

标签:const,1994,int,1600,CF,Hungry,vector,define
From: https://www.cnblogs.com/showball/p/18393733

相关文章

  • CF1948D
    CF1948D链接:Problem-1948D-Codeforces题目大意:给你一个字符串,字符串由小写字母和?组成,?可以变成任何数,问你重复子字符串的最大长度定义重复子字符串为,任意i都满足s[i]=s[i+len]的子字符串思路:枚举长度,然后对于每个长度,写一个f表表示是否可以喝i+len处对......
  • 【ACM独立出版, CCF主办】2024智能物联与计算国际学术会议(AITC 2024,11月1-11月3)
    为探讨智能物联与计算技术所涉领域的最新研究和发展趋势,2024智能物联与计算学术大会(AITC2024)将于2024年11月1日-11月3日在中国·杭州举行。AITC2024由中国计算机学会、中国人工智能学会、浙江省科学技术协会、浙江工业大学、浙江省人工智能产业技术联盟主办,由中国计......
  • CF 2100-2400 strings 乱做
    CF1995DCases显然如果选了某个字符那么不妨选它出现的所有位置。check方式等价于相邻两个选择的位置间距\(\lek\),等价于连续\(k\)个必须选一个(最后一个必须选)枚举位置维护字符集是做不了的,状态数\(O(n2^c)\)无法优化考虑枚举字符集\(s\)。设原串连续\(k\)个字符的字......
  • Syncfusion Essential Studio 26.2.4
    SyncfusionEssentialStudioisacompletesuitewith1,800+UIcomponentsandframeworksthatcanbeusedforallyourdesktop,web,andmobileapplicationdevelopmentneeds.EssentialStudioconsistsof.NETlibrariesandUIcontrolsthatprovidecomplet......
  • CF1998E2 Eliminating Balls With Merging (Hard Version)
    原题链接考虑对于每个\(i\),算出向左扩展到\(1\)时向右至少和至多扩展到哪里,记为\(minr\)和\(maxr\)。那么也就是说每个\(i\)会对\(minr\simmaxr\)做出贡献,差分一下就可以了。重点是怎么计算这两个东西。先说\(maxr\)。如果暴力跳,过程是:先向左扩展直到不能扩展,然后......
  • CF 1996 E. Decode(*1600) 思维+前缀和
    CF1996E.Decode(*1600)思维+前缀和题目链接题意:给你一个长度为\(n\)的二进制字符串,求出所有的子区间的所有满足\(0\)的个数等于\(1\)的个数的子区间个数之和。思路:首先,求一段区间是否满足\(0\)的数量是否等于\(1\)的个数,是非常经典的做法,我们只需要维护一个数......
  • CF 2001 D. Longest Max Min Subsequence(*1900) 思维
    CF2001D.LongestMaxMinSubsequence(*1900)思维题目链接题意:给你一个长度为\(n\)的序列\(a\),设\(S\)是\(a\)的所有可能的非空子序列的集合,且没有重复的元素。你的目标是找出\(S\)中最长的序列。如果有多个序列,请找出将奇数位置上的项乘以\(−1\)后,使词序最小......
  • CF 2002 D1. DFS Checker (Easy Version) (*1900)思维
    CF2002D1.DFSChecker(EasyVersion)(*1900)思维题目链接题意:给你一棵\(n\)个节点组成的完全二叉树,并给出一个排列\(p\)。接下来进行\(q\)次询问。每次询问给你\(x\)和\(y\),你需要交换\(p_x\)和\(p_y\)。并且回答交换之后的排列\(p\)是否是这棵完全二叉树......
  • CF 2004 D. Colored Portals (*1600) 二分
    CF2004D.ColoredPortals(*1600)二分题目链接题意:有\(n\)座城市,编号从\(1\)到\(n\)。传送门一共有\(4\)种颜色,每个城市有两种不同颜色的传送门。若城市\(i\)和城市\(j\)有相同颜色的传送门。那么就可以花费\(|i-j|\)枚金币从城市\(i\)到城市\(j\)。\(q\)......
  • CF2008场题解
    Sakurako'sExam算法:模拟,分类讨论。题意简述:给\(a\)个数字\(1\)和\(b\)个数字\(2\),问能否在每个数字前加上加减号使得原始值为\(0\)。考虑\(1\)的个数如果是奇数,那么一定不行。否则如果\(2\)的个数是偶数,一定可以。当\(2\)的个数为奇数且还可能可以时,判断是否存......