博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客OI测试赛 C 序列 思维
阅读量:7237 次
发布时间:2019-06-29

本文共 1402 字,大约阅读时间需要 4 分钟。

链接:

来源:牛客网

题目描述

小a有n个数,他想把他们划分为连续的权值相等的k段,但他不知道这是否可行。
每个数都必须被划分
这个问题对他来说太难了,于是他把这个问题丢给了你。

输入描述:

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

输出描述:

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

输入

5 32 1 3 -1 4321

输出

YesNoYes

备注:

对于
的数据,
对于
的数据,
对于
的数据,
设a
i表示数列中的第i个数,保证
保证数据完全随机
 
分析:
AC代码:
#include #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ls (r<<1)#define rs (r<<1|1)#define debug(a) cout << #a << " " << a << endlusing namespace std;typedef long long ll;const ll maxn = 1e5 + 10;const double eps = 1e-8;const ll mod = 1e9 + 7;const ll inf = 1e9;const double pi = acos(-1.0);ll a[maxn];int main() { std::ios::sync_with_stdio(false); ll n, q, sum = 0; scanf("%lld%lld",&n,&q); for( ll i = 0; i < n; i ++ ) { scanf("%lld",&a[i]); sum += a[i]; } while( q -- ) { ll k; scanf("%lld",&k); if( sum%k || k > n ) { printf("No\n"); continue; } ll ans = 0, avg = sum/k, cnt = 0; bool flag = false; for( ll i = 0; i < n; i ++ ) { ans += a[i]; //最后可能加上0,而0可以合并到前面区间,所以用ans=0来判断 //开始用flag判断最后一位是否刚好可以让ans=avg,判断错了 if( ans == avg ) { ans = 0; cnt ++; } } if( ans == 0 && cnt == k ) { printf("Yes\n"); } else { printf("No\n"); } } return 0;}

  

转载于:https://www.cnblogs.com/l609929321/p/9558931.html

你可能感兴趣的文章
14个Xcode中常用的快捷键操作
查看>>
关闭“JDK自动更新”提示
查看>>
房费制 之 登录BUG
查看>>
ProjectManagement::邮件超链接无法跳转到redmine的问题
查看>>
9个杀手级 JVM 编程语言
查看>>
MySQL 查看表结构简单命令。
查看>>
jQ效果:jQuery时间轴插件jQuery Timelinr
查看>>
linux、hdfs、hive、hbase经常使用的命令
查看>>
shiro权限架作战
查看>>
构建完整的知识体系
查看>>
第五章 Web应用程序状态管理
查看>>
jquery ui datepicker
查看>>
jdbc.properties
查看>>
httpclient+Jsoup总结
查看>>
Spring+Struts+Ibatis的配置
查看>>
git 配置多个SSH-Key(转)
查看>>
IBatis.Net学习笔记七--日志处理
查看>>
jquery表单内容过滤
查看>>
实现 select中指定option选中触发事件
查看>>
python字典
查看>>