题目链接:UVALIVE 2678

解题思路:
这题一共有两种做法,一种是二分法,时间复杂度为O( n*log(n) );一种是直接遍历,时间复杂度为O( n )。
二分:
维护一个sum数组,保存数列前 i 项和,之后对每一个大于m的sum[i],使用二分查找找到sum[i]-m的lowerbound。
遍历:
同样维护sum数组,并且维护两个指针,表示满足条件的区间,之后在遍历数组的过程中,基于贪心法则,不断调整区间范围,使得区间最小。
另外需要注意的是,找不到区间时需要输出0,这点题目没说。

二分代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3fusing namespace std;int n,m,ans,sum[100005];int search(int low, int high, int num)
{int mid;while(low<high){mid=(low+high)/2;if(sum[mid]<num)low=mid+1;elsehigh=mid;}return low;
}int main()
{while(~scanf("%d %d",&n,&m)){sum[0]=0;for(int i=1;i<=n;i++){scanf("%d",&ans);sum[i]=sum[i-1]+ans;}ans=INF;for(int i=1;i<=n;i++){if(sum[i]>=m){int index=search(0,i,sum[i]-m);ans=min(ans,i-index+1);}}if(ans==INF)printf("0\n");elseprintf("%d\n",ans);}return 0;
}

遍历代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3fusing namespace std;int n,m,sum[100005],ans;int main()
{while(~scanf("%d %d",&n,&m)){int start=0,tmp;sum[0]=0;for(int i=1;i<=n;i++){scanf("%d",&tmp);sum[i]=tmp+sum[i-1];}ans=INF;for(int i=1;i<=n;i++){if(sum[i]-sum[start]>=m){while(start<i && sum[i]-sum[start]>=m){ans=min(ans,i-start);start++;}               }}if(ans==INF)printf("0\n");elseprintf("%d\n",ans);}return 0;
}

UVALIVE 2678相关推荐

  1. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  2. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...

  3. UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset

    UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...

  4. 训练指南 UVALive - 3713 (2-SAT)

    layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...

  5. 逆序数 UVALive 6508 Permutation Graphs

    题目传送门 1 /* 2 题意:给了两行的数字,相同的数字连线,问中间交点的个数 3 逆序数:第一行保存每个数字的位置,第二行保存该数字在第一行的位置,接下来就是对它求逆序数 4 用归并排序或线段树求 ...

  6. Infinite Fraction Path UVALive - 8207

    Infinite Fraction Path UVALive - 8207 题意: 给你n个数,每个数在0到9之间,每个数的下标一次是0~n-1,然后他所能走到的数为(i^2+1)%n,i为他本身的下 ...

  7. F - Heron and His Triangle UVALive - 8206

    F - Heron and His Triangle UVALive - 8206 题意: 给你应该n,然后求一个最小的t,问长度为t-1,t,t+1所组成的三角形的面积为整数,t>=n 题解: ...

  8. Tree UVALive - 8212

    Tree UVALive - 8212 题意: 有n个点,k个颜色,每个点都要被染色,相同颜色之间的边算是被该颜色覆盖,问有多少边被所有颜色覆盖 题解: 题目给的是无根树,我们可以将1默认为根然后求所 ...

  9. Rabbits UVALive - 8211

    Rabbits UVALive - 8211 题意: n个兔子的位置,兔子每次可以跳到两个兔子之间,问最多可以跳多少下? 题解: 求出所有相邻两数的间隔,然后减去最小间隔就是答案 代码: #inclu ...

最新文章

  1. unity3d-高频率面试题目
  2. Tricky Sum
  3. 计算字符串的实际长度
  4. Python执行系统命令的方法 os.system(),os.popen(),commands
  5. 多线程循环输出abcc++_C ++循环| 查找输出程序| 套装5
  6. 56py无锡官方网站2013最新
  7. 物联网操作系统Hello China V1.76(PC串口版)版本发布
  8. php中的require(),PHP中include()与require()的区别说明
  9. Oracle 11.2.0.2 Patch 说明
  10. 服务器监控之 ping 监控
  11. VC2013同一个工程生成的exe文件显示不同的图标
  12. JavaScript特效之显示当前时间
  13. 命令行工具解析Crash文件,dSYM文件进行符号化
  14. 信道编码与matlab仿真 刘东华,【网安学术】交织技术对信道编码的性能影响研究...
  15. Velocity的使用
  16. 【SharePoint】你无权在SharePoint designer中打开此网站
  17. Mysql数据库 汉字转拼音全拼
  18. win10自动修复失败无限循环_windows自动修复失败,无法启动
  19. dotnetbar-SuperTabControl禁止调整顺序
  20. 这十一条程序员必备软技能,你一定要知道

热门文章

  1. 传统企业如何精准获客?搭上这趟高科技顺风车
  2. 百度地图android wear,Android Wear多款搜狗地图标注内置
  3. win7修复计算机无鼠标,win7电脑鼠标不听使唤反应慢如何修复
  4. 每日一录20220816—01
  5. EE308 Lab2-2
  6. 封装一个可以设置微信小程序的本地缓存接口过期时间的方法!
  7. Deepin-TIM / QQ / WeChat调整界面DPI字体大小的方法
  8. php页面导出csv,使用PHP生成并导出CSV文件
  9. 2009年最新搞笑语录
  10. 瞧瞧我们对漫画图片都做了什么!?