博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 和为k的连续区间(map/暴力)
阅读量:4207 次
发布时间:2019-05-26

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

基准时间限制:1 秒 空间限制:131072 KB 分值: 10 
 收藏
 关注
一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k。
Input
第1行:2个数N,K。N为数列的长度。K为需要求的和。(2 <= N <= 10000,-10^9 <= K <= 10^9)第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)。
Output
如果没有这样的序列输出No Solution。输出2个数i, j,分别是区间的起始和结束位置。如果存在多个,输出i最小的。如果i相等,输出j最小的。
Input示例
6 10123456
Output示例
1 4

n=10000,O(n^2)暴力能过。。。

const int maxn=1e4+10;ll sum[maxn];int  main(){    ios::sync_with_stdio(false);    int n,k;    while(cin>>n>>k)    {        int flag=1;        int x,y,tmp;        memset(sum,0,sizeof(sum));        for(int i=1;i<=n;i++)        {            cin>>tmp;            sum[i]=tmp+sum[i-1];        }        for(int i=0;i
下面这个用map写的才是比较快的

const int maxn=1e4+10;ll a[maxn],sum[maxn];map
mp;int main(){ ios::sync_with_stdio(false); int n,k; while(cin>>n>>k) { mp.clear(); memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) { cin>>a[i]; sum[i]=a[i]+sum[i-1]; mp[sum[i]]++; } for(int i=0;i

转载地址:http://weali.baihongyu.com/

你可能感兴趣的文章
关闭centos wayland
查看>>
【Error】chsh: PAM: Authentication failure
查看>>
【Error】zsh历史记录丢失
查看>>
解析漏洞总结
查看>>
有趣的二进制 读书笔记
查看>>
记一次vmware磁盘扩容part2:真正扩展根目录
查看>>
【Error】zsh: corrupt history file /home/myusername/.zsh_history
查看>>
记一次编译linux 2.6 和4.10内核源码
查看>>
【Error】couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) [duplicate]
查看>>
qemu 文件系统制作:自己制作根目录和应用程序 + busybox
查看>>
关闭CSDN广告必备插件:adblock plus
查看>>
【pwnable.kr】fd
查看>>
【pwnable.kr】 collision
查看>>
【pwnable.kr】bof
查看>>
【pwnable.kr】flag
查看>>
【pwnable.kr】 passcode
查看>>
【pwnable.kr】input
查看>>
【Windows C++】调用powershell上传指定目录下所有文件
查看>>
【Error】ropgadget依赖选项capstone报错ImportError: ERROR: fail to load the dynamic library.
查看>>
【Error】西部数据磁盘插上不显示盘符
查看>>