一整數數列a1, a2, ... , an(有正有負),以及另乙個整數k,求乙個區間[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k。
收起
第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最小的。
6 10123456
1 4思路 : 字首和思想。
#include #include #include using namespace std ;
typedef long long ll;
const ll inf = 0x3f3f3f3f3f3f3f3f;
// 1014
const ll maxn = 1e18+999 ;
const int max = 50005 ;
int n , k ;
ll a[max] ;
ll sum[max] ;
typedef struct node node ;
bool cmp(const node &a , const node &b)
for(int i = 1 ; i<=n ; i++)
} }sort(ans,ans+cnt ,cmp) ;
if(cnt!=0)
printf("%d %d",ans[0].x,ans[0].y);
else
return 0 ;
}
1094 和為k的連續區間
一整數數列a1,a2,an 有正有負 以及另乙個整數k,求乙個區間 i,j 1 i j n 使得a i a j k。收起第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 s...
51nod 1094 和為k的連續區間
一整數數列a1,a2,an 有正有負 以及另乙個整數k,求乙個區間 i,j 1 i j n 使得a i a j k。input 第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 output 如果沒有...
51Nod 1094 和為k的連續區間
1094 和為k的連續區間 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 收藏 關注 一整數數列a1,a2,an 有正有負 以及另乙個整數k,求乙個區間 i,j 1 i j n 使得a i a j k。input 第1行 2個數n,k。n為數列的長度。k為需要求...