題目描述:給定乙個陣列,判斷陣列內是否存在乙個連續區間,使其和恰好等於給定整數k。
輸入:輸入包含多組測試用例,每組測試用例由乙個整數n(1<=n<=10000)開頭,代表陣列的大小。
接下去一行為n個整數,描述這個陣列,整數絕對值不大於100。
最後一行為乙個整數k(大小在int範圍內)。
輸出:對於每組測試用例,若存在這個連續區間,輸出其開始和結束的位置,s,e(s <= e)。
若存在多個符合條件的輸出,則輸出s較小的那個,若仍然存在多個,輸出e較小的那個。
若不存在,直接輸出"no"。
樣例輸入:
5-1 2 3 -4 953
-1 2 -372
-1 1
0
樣例輸出:
2 3no1 2
思路:求出累加和存入sumlist[n],,用優先佇列儲存對應累加和的編號,從小到大遍歷累加和序列,在優先佇列中找到合適的解
#include #include #include using namespace std;
int sumlist[10010];
int numlist[10010];
priority_queuemask[2000010];
int n, k;
int main()
scanf("%d", &k);
bool res = false;
int temp, tempindex;
for(int i = 0; i < n; i++)
while(mask[tempindex].size() && mask[tempindex].top() >= i + 1)
printf("%d %d\n", i + 1, temp);
res = true;
break;
}} if(!res)
for(int i = 1; i <= n; i++)
}} return 0;
}
1 區間選點 區間問題
區間問題一般都需要對區間進行排序,對左端點排序,或對右端點排序,或雙關鍵字排序 然後需要 證明這樣的選法選出來的點數一定是符合答案的,且是選點最少的 首先按照這個方法來選的話,每乙個區間上一定選了乙個點,所以這種選法是一種合法的方案 然後這道題的最優解是指所有合法方案中的選點最少的,所以 所以ans...
8602 區間相交問題
8602 區間相交問題 時間限制 1000ms 記憶體限制 1000k題型 程式設計題語言 無限制 description 給定x軸上n個閉區間,去掉盡可能少的閉區間,使剩下的閉區間都不相交。注意 這裡,若區間與另一區間之間僅有端點是相同的,不算做區間相交。例如,1,2 和 2,3 算是不相交區間。...
1751 區間覆蓋問題
time limit 1000 ms memory limit 65536 kib problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給定的實直線上的n個點和閉區間的長度k,設計解此問題的有效演...