和为k的连续区间
来源:互联网 发布:3m净水器淘宝 编辑:程序博客网 时间:2024/05/22 10:29
一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k。
#include <iostream>#include <vector>#include <algorithm>using namespace std;struct Node{ long long int val; int index; Node(long long int v, int in) { val = v; index = in; } };int input[10002];bool comp(const Node &left, const Node &right){ if (left.val == right.val) { return left.index < right.index; } return left.val < right.val;}void fun(int *input, int N, int K){ long long int sum[N]; sum[0] = input[0]; vector<Node> a(N, Node(0,0)); a[0].val = input[0]; a[0].index = 0; if (sum[0] == K) { cout << 1 << " " << 1 << endl; return; } for (int i = 1; i < N; i++) { sum[i] = sum[i-1] + input[i]; if (sum[i] == K) { cout << 1 << " " << i+1 << endl; return; } a[i].val = sum[i]; a[i].index = i; } sort(a.begin(), a.end(), comp); for (int i = 0; i < N; i++) { int left = 0; int right = N-1; while (left < right-1) { int mid = left + (right-left)/2; if (a[mid].val - sum[i] + input[i]>= K) { right = mid; } else { left = mid; } } if (a[left].val - sum[i] + input[i] == K && a[left].index >= i){cout << i+1 << " " << a[left].index+1 << endl;return;}else if (a[right].val - sum[i] + input[i] == K && a[right].index >= i){cout << i+1 << " " << a[right].index+1 << endl;return;}while (right < N && a[right].val - sum[i] + input[i] == K){if (a[right].index >= i){cout << i+1 << " " << a[right].index+1 << endl;return;}right++;} } cout << "No Solution" << endl;}int main(){ int N; long long int K; cin >> N >> K; int a; for (int i = 0; i < N; i++) { cin >> a; input[i] = a; } fun(input, N, K); return 0;}
0 0
- 和为k的连续区间
- 51nod 1094 和为k的连续区间
- 51nod 1094 和为k的连续区间
- 51nod 1094 和为k的连续区间
- 51nod-1094 和为k的连续区间
- 51nod 1094 和为k的连续区间
- 51nod-【1094 和为k的连续区间】
- 51Nod 1094 和为k的连续区间
- 51nod 1094 和为k的连续区间
- 51nod 1094 和为k的连续区间
- 51Nod 1094 和为k的连续区间
- 51NOD1094 和为k的连续区间
- 51Nod 1094 和为k 的连续区间 题解
- 51nod 1094 和为k的连续区间
- 51nod1094-和为k的连续区间
- 和为k的连续区间 51Nod
- 51nod 1094 和为k的连续区间
- 51Nod 1094 和为k的连续区间 map
- Mysql出现Can’t connect to MySQL server on ‘localhost’ (0)问题
- SRM589 Div1 450
- 学习记录 Complex Networks Package for MatLab
- 确定实例与原型之间的关系
- PVID和VID的理解
- 和为k的连续区间
- nBodyCS<I>学习笔记之计算着色器
- 换行符与回车符
- 利用python-my-replication读取mysql的binlog
- Shell脚本八种字符串截取方法
- OpenGL
- Mysql的大字段问题
- nginx send_timeout 超时导致的302 错误
- 手机用户登录记住密码