[51nod1094]和为k的连续区间
法一:暴力$O({n^2})$看脸过
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[],sum[];
int main(){
int n,k;
cin>>n>>k;
for(int i=;i<=n;i++){ cin>>a[i];sum[i]=sum[i-]+a[i];}
bool flag=false;
for(int i=;i<n;i++){
for(int j=i+;j<=n;j++){
if(sum[j]-sum[i]==k){
cout<<i+<<" "<<j<<endl;
flag=true;
break;
}
}
if(flag) break;
}
if(!flag) cout<<"No Solution\n";
return ;
}
法二:map优化,存储sum数组的下标,复杂度$O(n\log n)$
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[],s[];
int main(){
map<ll,int>m;
ll n,k;
cin>>n>>k;
for(ll i=;i<=n;i++){ cin>>a[i];s[i]=s[i-]+a[i];}
for(ll i=n;i>=;i--) m[s[i]]=i;
bool ok=false;
ll l,r;
m[]=;
for(ll i=;i<=n;i++){ if(s[i]-k==&&!ok) l=,r=i,ok=true; else if(m[s[i]-k]){
if(m[s[i]-k]+>i) continue;
if(!ok) l=m[s[i]-k]+,r=i,ok=true;
else{
if(m[s[i]-k]+<l) l=m[s[i]-k]+,r=i;
else if(m[s[i]-k]+==l) r=min(r,i);
}
}
}
if(!ok) cout<<"No Solution\n";
else cout<<l<<" "<<r<<endl; return ;
}
法三:二分复杂度$O(n\log n)$,特别注意二分时的判断条件,很容易出错,idx和sum不可以一起判断,只能判断完sum,再独自判断idx,否则答案会出错
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
ll sum,idx;
}a[];
ll b[];
ll n,k;
bool cmp(node &a,node &b){
return (a.sum<b.sum)||(a.sum==b.sum&&a.idx<b.idx);
}
ll erfen(int p,int id){
ll l=,r=n;
while(l<r){
ll mid=(l+r)>>;
if(a[mid].sum>=p) r=mid;
else l=mid+;
}
return r;
}
int main(){
cin>>n>>k;
for(ll i=;i<=n;i++){
cin>>a[i].sum;
a[i].sum+=a[i-].sum;
a[i].idx=i;
b[i]=a[i].sum;
}
bool flag=false;
sort(a+,a+n+,cmp);
for(ll i=;i<=n;i++){
ll p=b[i-]+k;
ll idx=erfen(p,i);
while(a[idx].idx<i) idx++;
if(a[idx].sum==p){
cout<<i<<" "<<a[idx].idx<<endl;
flag=true;
break;
}
}
if(!flag) cout<<"No Solution\n";
return ; }
[51nod1094]和为k的连续区间的更多相关文章
- 51nod 1094 和为k的连续区间【前缀和/区间差/map】
1094 和为k的连续区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一整数数列a1, a2, ... , an(有正有负),以及另一个整数k ...
- 1094 和为k的连续区间(暴力)
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 ...
- 51Nod 1094 和为k的连续区间 | 水
Input示例 6 10 1 2 3 4 5 6 Output示例 1 4 #include "cstdio" #include "algorithm" #in ...
- 区间sum 和为k的连续区间-前缀和
区间sum 描述 有一个长度为n的正整数序列a1--an,candy想知道任意区间[L,R]的和,你能告诉他吗? 输入 第一行一个正整数n(0<n<=1e6),第二行为长度为n的正整数序列 ...
- 51Nod 1094 和为k的连续区间
#include <iostream> #include <algorithm> #include <cstring> using namespace std; t ...
- 51Nod 和为k的连续区间
一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k ...
- [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】
题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...
- codeforce-191E-Thwarting Demonstrations(树状数组+二分+离散)
题意: 求第K 大连续区间 分析: 二分答案,再n * log(n)判断有几个区间的区间和大于mid,然后调整上下界,使这个值不断的接近k. 判断符合条件的区间总数:线性扫描sum[n](前n项和) ...
- UVALive 8519 Arrangement for Contests 2017西安区域赛H 贪心+线段树优化
题意 等价于给一个数列,每次对一个长度为$K$的连续区间减一 为最多操作多少次 题解: 看样例猜的贪心,10分钟敲了个线段树就交了... 从1开始,找$[i,i+K]$区间的最小值,然后区间减去最小值 ...
随机推荐
- android 电池(二):android关机充电流程、充电画面显示【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...
- stdcall、cdecl详解(以及WINAPI和CALLBACK之类的宏对应什么)
转自:http://blog.csdn.net/huanjieshuijing/article/details/5822942 对_stdcall 的理解在C语言中,假设我们有这样的一个函数:int ...
- 兼容IE8及其他浏览器的回车事件
//阻止默认浏览器行为 function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) { // ...
- Codeforces 372B Counting Rectangles is Fun:dp套dp
题目链接:http://codeforces.com/problemset/problem/372/B 题意: 给你一个n*m的01矩阵(1 <= n,m <= 40). 然后有t组询问( ...
- SQL2005 2008配置错误,无法识别的配置节 system.serviceModel machine.config配置文件有问题
当装上2008的时候,你以前的程序突然报出你的machine.config配置文件有问题,比如 “/” 应用程序中的服务器错误. 配置错误 说明 : 在处理向该请求提供服务所需的配置文件时出错.请检查 ...
- asp.net中异步调用WebService(异步页)[转]
由于asp2.0提供了异步页的支持使异步调用WebService的性能有了真正的提升.使用异步页,首先要设置Async="true",异步页是在Prerender和Prerende ...
- cluster KMeans need preprocessing scale????
Out: n_digits: 10, n_samples 1797, n_features 64 ___________________________________________________ ...
- 第二章 python基础(一)
第一节 Python文件类型 源代码 Python源代码的文件以“py”为扩展名,由Python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为“pyc”的文件 编译方法 im ...
- codeforces 86D D. Powerful array(莫队算法)
题目链接: D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input stan ...
- gcc 4.8.5安装
在利用张乐博士的最大熵模型工具包(Maximum Entropy Modeling Toolkit for Python and C++)和条件随机场的经典工具包CRF++(CRF++: Yet An ...