51nod 1094 和為k的連續區間【前綴和/區間差/map】
阿新 • • 發佈:2017-11-04
分別是 F12 nod question 空間限制 多個 for 數列 bsp
1094 和為k的連續區間
基準時間限制:1 秒 空間限制:131072 KB 分值: 10 難度:2級算法題
收藏
關註
一整數數列a1, a2, ... , an(有正有負),以及另一個整數k,求一個區間[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k。
Input
Output
第1行:2個數N,K。N為數列的長度。K為需要求的和。(2 <= N <= 10000,-10^9 <= K <= 10^9) 第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)。
如果沒有這樣的序列輸出No Solution。 輸出2個數i, j,分別是區間的起始和結束位置。如果存在多個,輸出i最小的。如果i相等,輸出j最小的。Input示例
6 10 1 2 3 4 5 6Output示例
1 4
【代碼】:
#include <bits/stdc++.h> using namespace std; #define inf 1e18+100 #define LL long long const int maxn = 1e4+100; int main() { int n,k;前綴和+暴力O(n²)int a[maxn],sum[maxn]; memset(sum,0,sizeof(sum)); cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i]; sum[i]=sum[i-1]+a[i]; } for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { if(sum[j]-sum[i]==k) { printf("%d %d\n",i+1,j); return 0; } } } printf("No Solution\n"); return 0; }
map優化可達到O(n)
51nod 1094 和為k的連續區間【前綴和/區間差/map】