九度oj 1554 区间问题
原题链接:http://ac.jobdu.com/problem.php?pid=1554
由数列的前缀和:$\begin{align*}\Large{} S_n &=\Large{}\sum_{i=1}^{n}{{a_i}} \ \ \ \ i=1,2,3...n\end{align*}$
由于:$\begin{align*}\Large{} S_n -S_{n-1}&=\Large{}a_n \end{align*}$
所以区间$\begin{align*}\Large{} [i,j]\end{align*}$ 之和,$\begin{align*}\Large{} S_j -S_{i-1}&=\Large{}a_i+a_{i+1}+...+a_j\ \ \ 1 \leq i,j,\leq n\end{align*}$
由题意给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整$\begin{align*}\Large{} k \end{align*}$
其实就是判断$\begin{align*}\Large{} Sum[j] -Sum[i]=k\end{align*}$是否成立。
暴力的方法直接枚举,由于$\begin{align*}\Large{} n=10000\end{align*}$会$\begin{align*}tle\end{align*}$。
现在我们换个思路,试试二分,考虑开个结构体数组,保存原数组的前缀和+原来的位置。
然后对其排序,再进行二分。但这样可能会出错,所以再判断一下,即可。
懒得啰嗦了,直接看代码吧。。
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
using std::sort;
using std::lower_bound;
const int Max_N = ;
int arr[Max_N], sum[Max_N], temp[Max_N];
struct Node {
int v, pos;
bool operator<(const Node &x) const {
if (v == x.v) return pos < x.pos;
return v < x.v;
}
}rec[Max_N];
void solve(int n, int k) {
int p = ;
for (int i = ; i < n; i++) {
p = lower_bound(temp + , temp + n, sum[i] + k) - temp;
if (p == n && sum[n] != k) continue;
if (rec[p].pos > i && rec[p].v == sum[i] + k) {
printf("%d %d\n", i + , rec[p].pos);
return;
} else {
p++;
while (rec[p].v == sum[i] + k) {
if (rec[p].pos > i) {
printf("%d %d\n", i + , rec[p].pos);
return;
}
p++;
}
}
}
puts("No");
}
int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w+", stdout);
#endif
int n, k;
while (~scanf("%d", &n)) {
for (int i = ; i <= n; i++) {
scanf("%d", &arr[i]);
sum[i] = sum[i - ] + arr[i];
rec[i].v = sum[i], rec[i].pos = i;
}
scanf("%d", &k);
sort(rec + , rec + n);
for (int i = ; i <= n; i++) temp[i] = rec[i].v;
solve(n, k);
}
return ;
}
九度oj 1554 区间问题的更多相关文章
- 【九度OJ】题目1065:输出梯形 解题报告
[九度OJ]题目1065:输出梯形 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1065 题目描述: 每组测试 ...
- 【九度OJ】题目1431:Sort 解题报告
[九度OJ]题目1431:Sort 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1431 题目描述: 给你n个 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...
- 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...
- 九度OJ 1371 最小的K个数 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...
随机推荐
- The str method
__str__ is a special method name, like __init__, that is supposed to return a string representation ...
- LICEcap GIF 屏幕录制工具
LICEcap 是一款屏幕录制工具,支持导出git动画图片格式,简单好用.大小只有几百KB 运行之后,可以随意调整大小,右下角有开始/停止按钮. 压缩包:http://files.cnb ...
- NSString用法
1 创造字符串 NSString *str1 = @"hello"; NSString *str2 = [NSString string]; NSString *str3 = [N ...
- ASP.NET MVC 中使用 AjaxFileUpload 插件时,上传图片后不能显示(预览)
AjaxFileUpload 插件是一个很简洁很好用的上传文件的插件,可以实现异步上传功能,但是在 ASP.NET MVC中使用时,会出现上传图片后不能正确的显示的问题,经过仔细排查,终于找到原因,解 ...
- childNodes在IE与Firefox中的区别
嗯,这是前几天写一个遍历双层List集合,动态输出对应的表格并且控制固定表头的效果时发现的一个知识点,程序编好后在IE8浏览器下测试没问题,在Firefox35.0.1总是报错,后来发现是IE与FF对 ...
- Are Landing Pages Killing Your Conversion Rate?
http://searchenginewatch.com/sew/how-to/2411253/are-landing-pages-killing-your-conversion-rate
- MFC中release版本和debug版本区别
最近MFC写了个程序,生成release版,原来正常,后来删掉了些控件再编译运行,结果竟然报内存读写错误,debug却是正常的.后来将“Project Settings” 中 “C++/C ...
- Linux下的多进程编程
1.进程 1.1进程的定义 <计算机操作系统>这门课对进程有这样的描述:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统 ...
- EnCase v7 could not recognize Chinese character folder names / file names on Linux Platform
Last week my friend brought me an evidence file duplicated from a Linux server, which distribution i ...
- Largest palindrome product
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2 ...