对应 九度 题目:点击打开链接

题目描述:

给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k。

输入:

输入包含多组测试用例,每组测试用例由一个整数n(1<=n<=10000)开头,代表数组的大小。
接下去一行为n个整数,描述这个数组,整数绝对值不大于100。
最后一行为一个整数k(大小在int范围内)。

输出:

对于每组测试用例,若存在这个连续区间,输出其开始和结束的位置,s,e(s <= e)。
若存在多个符合条件的输出,则输出s较小的那个,若仍然存在多个,输出e较小的那个。
若不存在,直接输出"No"。

样例输入:
5
-1 2 3 -4 9
5
3
-1 2 -3
7
2
-1 1
0
样例输出:
2 3
No
1 2

思路:sum[i] 表示前i项和,题意即变为求是否存在 sum[i] - sum[j-1] == k,直接枚举无法通过。把式子转化一下可变为:sum[i] == sum[j-1] + k;题意又变为求是否存在一个sum[i] 使sum[j-1] + k == sum[i] 成立。这样直接过一遍就可以了。在不考虑前缀和相同的情况,用map标记就可以完成查找工作,如果存在前缀和相同的情况,用个vector容器跟每个前缀和对应就可以了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <map>
#include <vector>
#define M 10010
#define OFFSET 1000000
#define MIN(x, y) ((x) < (y) ? (x) : (y))
int sum[M];
using namespace std;
vector<int>cnt[M];int main()
{//freopen("in.txt", "r", stdin);int n;int i, j, k, a, t, s, u;while(~scanf("%d", &n)){u = 1;map<int, int>vis;memset(sum, 0, sizeof(sum));for(i=0; i<n; i++){scanf("%d", &a);s = sum[i+1] = sum[i] + a;if(vis.find(s) == vis.end())vis[s] = u++;cnt[vis[s]].push_back(i + 1);}scanf("%d", &k);if(abs(k) > OFFSET){printf("No\n");continue;}int left = 0, right = 0;int flag = 0;for(i=1; i<=n; i++){t = sum[i-1] + k;if(vis[t]){int b = vis[t];for(j=0; j<cnt[b].size(); j++){if(cnt[b][j] >= i){flag = 1;left = i;right = cnt[b][j];break;}}if(flag) break;}}if(flag) printf("%d %d\n", left, right);else printf("No\n");for(i=0; i<M; i++)cnt[i].clear();}return 0;
}

区间和问题——九度 1554相关推荐

  1. 九度1088——剩下的树

    九度1088 题目描述: 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,-,L共L+1个 ...

  2. 质因数的个数 - 九度教程第54题

    质因数的个数 - 九度教程第54题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: 求正整数 N(N>1)的质因数的个数. 相同的质因数需要重复计算.如 120=22235 ...

  3. 九度 1408 寻找表达式 (中缀转后缀)

    题目描述 总结 1. '_' 运算符不是 a*10 + b, 而是 a*(10 or 100) + b 2. char * 与 string 的相互转化 char* = string.c_str() ...

  4. 剑指Offer - 九度1511 - 从尾到头打印链表

    剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...

  5. 九度 1545:奇怪的连通图

    题目描述 总结 1. 用 BFS 实现 Dijkstra. 要点是, visited 后标记, 把某个点从优先队列取出后再标记 代码 未通过九度测试 RE /** source.cpp** Creat ...

  6. 九度题库(所有题目整理,适合计算机考研和面试的人用)

    本来搜一道面试题,找到叫九度题库的地方,发现里面的题目都比较基础,很适合当面试题来练习. 于是,闲得蛋疼,把所有题目给爬下来了,并整理成markdown格式,然后export成pdf,方便大家离线阅读 ...

  7. 九度 1462:两船载物问题(01背包)

    题目描述: 给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品. 思路 1. 朴素背包问题 2. 有几个细节要好好把握 (1) 在读入物品重量时顺带统计物品的最大值和总 ...

  8. 【强烈推荐】程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!!!!!

    程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!! 在国内计算机考研中,已经有越来越多的高校采用ACM上机考试的形式,在复试中来考察考生的实际动手编程能力,并且机试在复试中所占 ...

  9. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

最新文章

  1. Spring中Bean的后置处理器
  2. Luogu P5652 基础博弈练习题 (博弈论、图论)
  3. 2016蓝桥杯省赛---java---B---8(四平方和)
  4. 卷积神经网络——第一周 卷积神经网络基础——第三部分
  5. qgraphicsview鼠标移动图片_交互式QGraphicsView(平移/缩放/旋转)-阿里云开发者社区...
  6. 【手势识别】基于matlab肤色静态手势识别【含Matlab源码 288期】
  7. vue从s3(AWS)中获取图片并展示
  8. 《Spring实战,【吐血整理】
  9. 计算机视觉中的图像扭曲
  10. 工程学导论——心得体会
  11. 2022Vue经典面试题及答案汇总(持续更新)
  12. 【人脸58点关键点】基于面积对比法的脑卒中识别算法
  13. DevOps—持续开发Gitlab(三)
  14. Mac 2020版M1 安装虚拟机各种踩坑详解(关注文末小惊喜哟)
  15. adams怎么做往复运动_Adams设置运动函数的具体方法
  16. 雅可比矩阵:“Jacobian“矩阵
  17. 湍流 Spectrum 与 Cascade 的理解
  18. java流式编程(六)Collector接口
  19. linux 系统安装 QQ 2019【QQ for linux】
  20. 阿里巴巴计算机招聘学历要求,进阿里巴巴工作需要什么学历?听完马云的回答,网友:没骗人吧?...

热门文章

  1. 线程锁--普通锁 Lock lock = new ReentrantLock();
  2. JS利用函数冒泡排序
  3. 三星领跑全球液晶电视市场
  4. AcceptEx获取远程ip和端口
  5. [iOS]根据UIColor获取及改变RGB和Alpha
  6. 牛客-ZJH and Monkeys(树的dfs)
  7. 卷积神经网络之(使用重复元素的网络)VGG
  8. Pyside2 学习系列二:PyInstaller打包项目exe (超详细的Pyside2 攻略)
  9. python世界你好的输出便携电源适配器_65W PD 输出,thinkplus USB-C 便携电源适配器(PA65)开箱评测...
  10. onreadystatechange