在火星購物是乙個完全不同的體驗。
火星人用被鍊子連在一起的鑽石付款,每顆鑽石都有一定的價值。
付款時,只能在鏈條的某一位置上切割一次,然後一些鑽石就會乙個接著乙個的從鏈條上脫落。
一旦鑽石脫離鏈條,就不能在穿回去。
例如,如果我們有乙個鑽石鏈條,上面有 8 顆鑽石,價值分別為 3,2,1,5,4,6,8,7元,而我們需要支付的**為 15 元。
我們有三種選擇:
在 4 和 6 之間剪斷鏈條,然後取走前 55 顆鑽石,價值為 3+2+1+5+4=15。
在 5 之前或 6 之後剪斷鏈條,然後取走第 4∼6 顆鑽石,價值為 5+4+6=15。
在 8 之前剪斷鏈條,然後取走後 2 顆鑽石,價值為 8+7=15。
現在給定鑽石鏈條上鑽石的價值以及顧客需要支付的價錢,請你幫助顧客確定他有多少種選擇方案。
如果無法恰好湊出顧客需要支付的確切金額,那就湊出足夠支付的情況下的最少金額,從而避免鑽石浪費。
輸入格式
第一行包含兩個整數 n 和 m,分別表示鏈條上的鑽石數量以及顧客需要支付的金額。
第二行包含 n 個整數,d1,d2,…,dn,表示鑽石的價值。
輸出格式
每行輸出一種可行方案,具體格式為 i-j,表示 di+…+dj=mdi+…+dj=m。
如果方案不唯一,則按照 ii 遞增的順序輸出所有方案。
如果無法準確湊出 m,仍然輸出 i-j,表示 di+…+dj>m 並且 di+…+dj−m 的值最小。
如果方案不唯一,則按照 i 遞增的順序輸出所有方案。
資料範圍
1≤n≤105
,1≤m≤108
,1≤di≤103
∑di≥m∑di≥m
輸入樣例1:
161532
1546
871610
1511912
1413
輸出樣例1:1-
54-6
7-811
-11輸入樣例2:513
2457
9輸出樣例2:2-
44-5
#include
#include
using
namespace std;
const
int n =
100010
, inf =
1e9;
int n, m;
int s[n]
;int
main()
int res = inf;
for(
int i =
1, j =
0; i <= n; i ++
)for
(int i =
1, j =
0; i <= n; i ++
)return0;
}
#include
#define x first
#define y second
using
namespace std;
typedef pair<
int,
int> pii;
int n,m,maxsum=int_max;
intmain()
;//表示給定的一組數中第1個數到第i個數的和,a[0]=0
vectorv;
//儲存加和最小且要大於m的一串數字的首尾位置
for(
int i=
1;i++i)
int flag=0;
for(
int i=
0;i++i)
else
if(a[j]
-a[i]
>m&&a[j]
-a[i]
//將當前這一串數字的首尾位置加入vector中
}else
if(a[j]
-a[i]
>m&&a[j]
-a[i]
==maxsum)
//如果a[j]-a[i]>m&&a[j]-a[i]==maxsum
v.push_back()
;//將當前這一串數字的首尾位置加入vector中}if
(!flag)
//flag==0,表示沒有找到總和等於m的一組數字,輸出vector中的數字
for(
int i=
0;isize()
;++i)
printf
("%d-%d\n"
,v[i]
.x,v[i]
.y);
return0;
}
1044 火星數字 20 PAT乙級真題
火星人是以13進製計數的 地球人的0被火星人稱為tret。地球人數字1到12的火星文分別為 jan,feb,mar,apr,may,jun,jly,aug,sep,oct,nov,dec。火星人將進製以後的12個高位數字分別稱為 tam,hel,maa,huh,tou,kes,hei,elo,syy...
1044 火星數字 20 PAT乙級真題
火星人是以13進製計數的 例如地球人的數字 29 翻譯成火星文就是 hel mar 而火星文 elo nov 對應地球數字 115 為了方便交流,請你編寫程式實現地球和火星數字之間的互譯。輸入格式 輸入第一行給出乙個正整數n 100 隨後n行,每行給出乙個 0,169 區間內的數字 或者是地球文,或...
PAT甲級真題1153
pat 准考證號由 44 部分組成 第 11 位是級別,即 t 代表頂級 a 代表甲級 b 代表乙級 第 2 42 4 位是考場編號,範圍從 101101 到 999999 第 5 105 10 位是考試日期,格式為年 月 日順次各佔 22 位 最後 11 1311 13 位是考生編號,範圍從 00...