UVALIVE 2678
题目链接: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相关推荐
- DP UVALive 6506 Padovan Sequence
题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...
- The UVALIVE 7716 二维区间第k小
The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...
- UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset
UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...
- 训练指南 UVALive - 3713 (2-SAT)
layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...
- 逆序数 UVALive 6508 Permutation Graphs
题目传送门 1 /* 2 题意:给了两行的数字,相同的数字连线,问中间交点的个数 3 逆序数:第一行保存每个数字的位置,第二行保存该数字在第一行的位置,接下来就是对它求逆序数 4 用归并排序或线段树求 ...
- Infinite Fraction Path UVALive - 8207
Infinite Fraction Path UVALive - 8207 题意: 给你n个数,每个数在0到9之间,每个数的下标一次是0~n-1,然后他所能走到的数为(i^2+1)%n,i为他本身的下 ...
- F - Heron and His Triangle UVALive - 8206
F - Heron and His Triangle UVALive - 8206 题意: 给你应该n,然后求一个最小的t,问长度为t-1,t,t+1所组成的三角形的面积为整数,t>=n 题解: ...
- Tree UVALive - 8212
Tree UVALive - 8212 题意: 有n个点,k个颜色,每个点都要被染色,相同颜色之间的边算是被该颜色覆盖,问有多少边被所有颜色覆盖 题解: 题目给的是无根树,我们可以将1默认为根然后求所 ...
- Rabbits UVALive - 8211
Rabbits UVALive - 8211 题意: n个兔子的位置,兔子每次可以跳到两个兔子之间,问最多可以跳多少下? 题解: 求出所有相邻两数的间隔,然后减去最小间隔就是答案 代码: #inclu ...
最新文章
- unity3d-高频率面试题目
- Tricky Sum
- 计算字符串的实际长度
- Python执行系统命令的方法 os.system(),os.popen(),commands
- 多线程循环输出abcc++_C ++循环| 查找输出程序| 套装5
- 56py无锡官方网站2013最新
- 物联网操作系统Hello China V1.76(PC串口版)版本发布
- php中的require(),PHP中include()与require()的区别说明
- Oracle 11.2.0.2 Patch 说明
- 服务器监控之 ping 监控
- VC2013同一个工程生成的exe文件显示不同的图标
- JavaScript特效之显示当前时间
- 命令行工具解析Crash文件,dSYM文件进行符号化
- 信道编码与matlab仿真 刘东华,【网安学术】交织技术对信道编码的性能影响研究...
- Velocity的使用
- 【SharePoint】你无权在SharePoint designer中打开此网站
- Mysql数据库 汉字转拼音全拼
- win10自动修复失败无限循环_windows自动修复失败,无法启动
- dotnetbar-SuperTabControl禁止调整顺序
- 这十一条程序员必备软技能,你一定要知道