首页 > 其他分享 >【P1956】Sum

【P1956】Sum

时间:2023-02-05 09:44:38浏览次数:33  
标签:P1956 set int Sum long 枚举 include

水题,甚至比我做的很多绿都简单。也许是比较典?

套路的,设数组 \(b\) 满足 \(b_i =a_i\bmod p\)。相当于求 \(b\) 的在模 \(p\) 意义下最小大于 \(k\) 子段和。

更加套路的,我们有前缀和优化的 \(n^2\) 做法:枚举左右端点。

但是显然在 \(n\le 10^5\) 时这做法寄了。

我们换个思路:如果只要求大于 \(k\) 的值,那么是否一些枚举是不必要的?

没错确实有很多不必要的枚举。我们枚举右端点 \(r\),寻找一个最大的 \(l\) 使得这个区间满足要求。这样直接一路 \(O(n)\) 扫过去就可以了。

但是怎么找呢?把前缀和丢进 set 就行了。

总复杂度 \(O(n\log n)\)。

然后这道题就基本做完了。

小心两个坑点:

  1. 别忘了 long long
  2. 直接减会出负数。
#include <set>
#include <stdio.h>
#include <algorithm>
#define int long long
using std::min;
std::set<int> q;
int s[100005];
signed main()
{q.insert(0);
	int n,k,p,i,x,res=1ll<<60;scanf("%lld %lld %lld",&n,&k,&p);
	for(i=1;i<=n;++i)
	{
		scanf("%lld",&x);
		s[i]=(s[i-1]+x)%p;
	}
	for(i=1;i<=n;++i)
	{
		res=min(res,s[i]+(s[i]<k?p:0)-(*--q.upper_bound((s[i]+p-k)%p)));
		q.insert(s[i]);
	}
	printf("%lld",res);
	return 0;
}

标签:P1956,set,int,Sum,long,枚举,include
From: https://www.cnblogs.com/Syara/p/17092879.html

相关文章

  • CF1270G Subset with Zero Sum
    CF1270GSubsetwithZeroSum-洛谷|计算机科学教育新生态(luogu.com.cn)普通序列抽数,要求和为\(0\),则只能暴力搜索。那突破口肯定是\(i-n\lea_i\lei-1\)......
  • 每日一道思维题——CF1691C - Sum of Substrings
    题意:给定一个长度为n的字符串算由SiSi+1构成的子字符串值如00为0,01为1,10为10,11为11F(s)为所有值之和求出此值的最小值思路:优先将1放到最后,其次将1放在开头其余的位置......
  • checksum table t1;
    ################### mysql>checksumtablet1;+---------+-----------+|Table|Checksum|+---------+-----------+|test.t1|372885777|+---------+--......
  • java实现oracle和mysql的group by分组功能|同时具备max()/min()/sum()/case when 函数
    一、前言oracle和mysql的groupby分组功能大家应该清楚,那如何使用java实现同样的功能呢比如下面这个表idnameagemathEnglish10yujianlin2092.5103ww841025201026110363103......
  • P1466 集合 Subset Sums(01背包)
    题目描述对于从1到N(1<=N<=39)的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字......
  • Resume @ John-Paul Verkamp
    JP'sBlogGITHUB * FLICKR * RESUME SearchProgrammingReviewsPhotographyMakerWritingResearchRSSResume@John-PaulVerkamp https://blog.jv......
  • [LeetCode]Minimum Path Sum
    QuestionGivenamxngridfilledwithnon-negativenumbers,findapathfromtoplefttobottomrightwhichminimizesthesumofallnumbersalongitspath.N......
  • 1877.minimize-maximum-pair-sum-in-array 数组中最大数对和的最小值
    问题描述1877.数组中最大数对和的最小值解题思路贪心将数组从小到大排序,最小最大配对,次小次大配对,依次配对,结果就是这些配对和的最大值。代码classSolution{publi......
  • Consecutive sum II 1977
    ​​点击这里看题目链接ConsecutivesumII​​#include<stdio.h>#include<math.h>intmain(){unsignedlonglongm,n;scanf("%I64d",&n);while(n--){scan......
  • Atcoder ABC282H Min + Sum
    https://atcoder.jp/contests/abc282/tasks/abc282_h挂了好久发现二分写挂了……对于\(\min\{a_i\}\)这一部分,不难想到找到当前\(\min\{a_i\}\)的位置计算其左右两......