题干:

小a有n个数,他想把他们划分为连续的权值相等的k段,但他不知道这是否可行。

每个数都必须被划分

这个问题对他来说太难了,于是他把这个问题丢给了你。

输入描述:

第一行为两个整数n,q,分别表示序列长度和询问个数。
第二行有n个数,表示序列中的每个数。
接下来的q行,每行包含一个数k,含义如题所示。

输出描述:

输出q行,每行对应一个数Yes或者No,分别表示可行/不可行

示例1

输入

复制

5 3
2 1 3 -1 4
3
2
1

输出

复制

Yes
No
Yes

备注:

 

对于的数据,

对于的数据,

对于的数据,

设ai表示数列中的第i个数,保证

保证数据完全随机

解题报告:

刚开始以为二分复杂度是正确的,写了一个就AC了,但是后来一想发现不对啊复杂度成了O(q^2logn)、、、大概是数据水了吧

而且我这种解法根本不适合有负数存在的情况、、因为sum数组就不单调了呀。

AC代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAX = 100000 + 5 ;
ll a[MAX];
ll sum[MAX];
int main()
{int n,q,k;cin>>n>>q;for(int i = 1; i<=n; i++) scanf("%lld",a+i),sum[i] = sum[i-1] + a[i];while(q--) {scanf("%d",&k);if(sum[n] % k != 0) {puts("No");continue;}int every = sum[n] / k;int cur = 0,flag = 1;for(int i = 1; i<=k; i++) {int pos = lower_bound(sum+1,sum+n+1,cur + every) - sum;if(sum[pos] != cur+every) {flag=0;break;}cur += every;}if(flag == 1) puts("Yes");else puts("No");}//    2 3 6 5 9return 0 ;} 

标程:(其实也差不多啦复杂度o(因子个数*N + q))

其实就是打表算的,对于这题其实打表比较合适,因为q比n大,且题干中说了数据保证随机,所以最好是打表然后o(1)查询

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int MAXN = 2 * 1e6 + 10, INF = 1e9 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int a[MAXN];
bool ans[MAXN];
int main() {int N = read(), Q = read();LL sum = 0;for(int i = 1; i <= N; i++) a[i] = read(), sum += a[i];for(int i = 1; i <= N; i++) {if(sum % i != 0) {ans[i] = 0; continue;}LL cur = 0, k = 0;for(int j = 1; j <= N; j++) {cur += a[j];if(cur == sum / i) cur = 0, k++;}ans[i] = (cur == 0 && k == i);}while(Q--) {int x = read();puts(!ans[x] ? "No" : "Yes");}
}

数据保证随机的意思是 sum 的因子不会太多(构造数据可以达到1e5级别)
另外可能有一个坑点:因为有负数的存在,如果当前数大于了 sum/k 了,是不能直接跳出的(这是针对标程的解法的,用前缀和就不存在这个问题)

还是要注意一下负数啊!!各种题中,尤其是那种,说 int范围的。比如这题


不对啊,我那种方法其实修改一下也是正确的,用set维护一个pair<前缀,当前下标>,然后每次二分查找pair<那个值,上一次查找的下标>,这样找到的就是pair<那个值,那个下标后面的值>或者pair<大于那个值,下标无所谓>,我们在if判断一下是否是第一种,就可以了。

【牛客 - 181C】序列(前缀和,二分,可用set维护)(有坑)相关推荐

  1. 牛客16732 序列(排列组合)

    同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 链接:https://ac.nowcoder.com/acm/problem/16732 来源:牛客网 时间限制: ...

  2. 牛客练习赛52.Galahad(树状数组维护区间不相同数的和)

    链接:https://ac.nowcoder.com/acm/contest/1084/B 来源:牛客网 Galahad 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K ...

  3. 牛客contest897 D-Bamboo Rat(二分+黑白染色+最小割)

    题目链接 题意 N×MN×MN×M的矩阵选择KKK个数相邻的数字不能同时选择,让最小的数字最大. 思路 二分枚举答案,对于每个答案,DinicDinicDinic判断可行性. #include < ...

  4. 【牛客 -2A】矩阵(二分,字符串哈希)

    题干: 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行两个整数n, m代表矩阵的长和宽: 接下来n行,每行 ...

  5. 牛客 CMB1 序列找数

    利用位运算,任何数和他自己本身做位异或运算都得0,而0和任何数做位异或都得那个数 import java.util.*; public class Main{public static void ma ...

  6. 【牛客 - 2B】树(思维,dp,有坑)

    题干: shy有一颗树,树有n个结点.有k种不同颜色的染料给树染色.一个染色方案是合法的,当且仅当对于所有相同颜色的点对(x,y),x到y的路径上的所有点的颜色都要与x和y相同.请统计方案数. 输入描 ...

  7. 牛客xiao白月赛32-- 拼三角(暴力却有坑)

    题目如下: 我一开始想通过sort直接比较,但直接Wa了,这是为什么呢? 看下面这个例子: 3 8 12 15 16 16 3 15 16一组 8 12 16一组 所以:不可以通过sort去比较更小的 ...

  8. 牛客网笔试输入输出总结<记录自己踩的坑>

    1.对于那种只需要写一个方法的题目,只要注意方法中参数的类型和返回值类型即可 2.对于需要自己考虑输入和输出的题目,自己主要遇到过以下几种情况,并自己尝试了进行读取 首先不会改变的是以下几段代码 im ...

  9. 牛客网华为机试题(JavaScript)

    最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...

最新文章

  1. Visual Studio2019 应用程序无法正常启动0xc000007b
  2. Problem E: 成绩排序
  3. Vuex原来可以这样上手
  4. RxJava操作符lift笔记25
  5. sicily 1443 Printer Queue
  6. LabVIEW以太网仪器控制
  7. android 反编译 签名,Android反编译及重签名命令
  8. 陪孩子的周日-20220123
  9. 功放的工作原理与作用
  10. JAVA 模拟扑克牌洗牌发牌案例
  11. Linux环境批量下载阿里云盘资源
  12. 4G低功耗摄像头如何实现快速视频,拍照上传文件
  13. iOS8扩展插件开发配置
  14. 微软应用商店打不开代码: 0x80131500
  15. Ubuntu16.04更改新加卷名称
  16. java类 家族成员 姓氏_java题目 将一些学生分别按姓氏分类,每个姓氏的学生输出到一行上。...
  17. DirectX游戏编程入门——前言
  18. 【教程】删除压缩包密码
  19. 模拟计算MS软件常见问题及解答(一)
  20. mysql李玉婷网课配套笔记(一) 基础查询、条件查询bilibili

热门文章

  1. [Leetcode][第100题][JAVA][相同的树][二叉树][深度遍历][递归]
  2. linux上git克隆命令,Git clone命令用法
  3. php在html中生成option,使用PHP可以将HTML SELECT/OPTION值设为NULL吗?
  4. python编程口诀_少儿Python编程中的算术与技巧
  5. 英语答题测试的软件叫什么,英语做题软件哪个好 有答案解析的英语做题软件分享...
  6. WINCE6补丁安装
  7. sqlite3_setp
  8. 大话WinCE与WinXP应用程序开发的差异性
  9. 固态硬盘 linux 文件系统,SSD是否需要使用特别的文件系统?
  10. arcgis矢量之间的空白如何快速填充