題目描述
oi總部最近得到可靠訊息,近日來怪盜基德會再次來oi總部盜竊機密檔案(因為是機密,所以不能透露),所以oier得在怪盜基德來臨之前就把檔案備份。不過,正好今天oi總部停電了,所以就得人工抄寫了。現在,oi總部內一共有m份資料和k個oier(s),需要將每乙份資料都備份乙份,m份資料的頁數不一定相同(有不同的,也有相同的)。
現在,你作為其中的一名oier,把資料分配給oier備份,由於人太多了,所以每一名oier所分配到的資料都必須是連續順序的,並且每一名oier的備份速度是相同的。
你的任務就是讓備份的時間最短,列出最短的方案。資料可能存在多個解,所以,當存在多個解時,讓前面的人少備份。
輸入
輸入檔案中的第一行為兩個整數m,k,分別表示書本的數目和oier的人數。
第二行中為由m個分隔的整數構成,分別表示m本書的頁數。其中:第i份資料的編號為i。
輸出
輸出檔案中共有k行,每行有兩個整數。其中:第i行中表示第i個oier備份的資料編號的起止。
樣例輸入
8 3
1 2 3 4 5 6 7 8
樣例輸出
1 3
4 67 8
提示
【資料範圍】
對於50%的資料,滿足:1<=k<=m<=500;
對於100%的資料,滿足:1<=k<=m<=1000。
解題思路
二分求頁數最大數,只要能抄就抄
如果當前的書=人,那麼就人手一本
#include
#include
using namespace std;
struct dt
ans[
2000];
int n,m,a[
2000
],l,r;
void
demo
(int mid)
if(i<=mid&&m-cnt==i)
if(s+a[i]
>mid)
cnt++
,s=a[i]
;else s+=a[i];}
cnt++;if
(cnt>m)
l=mid;
else r=mid;
}int main()
while
(l+1
int j=n,cnt=
0,s=0;
for(int i=n;i>
0;i--
)else
s=a[i];}
else
s+=a[i];if
(i==m-cnt)}if
(j!=0)
ans[
++cnt]
.y=j,ans[cnt]
.x=1
;for
(int i=m;i>
0;i--
)printf
("%d %d\n"
,ans[i]
.x,ans[i]
.y);
}
JZOJ 3 18 1508 普及模擬 螞蟻
題目描述 在二維平面座標軸裡面,有n只螞蟻,第i只螞蟻所在的點的座標是 xi,yi 座標都是整數。所有螞蟻的移動速度都相等,都是每秒移動1個單位。每只螞蟻都有乙個固定的移動方向,是如下4種方向之一,都是平行於座標軸的 l n表示向北 即朝上 則y座標正方向。l e表示向東 即朝右 則x座標正方向。l...
JZOJ 3 18 1507 普及模擬 數列
題目描述 給定乙個等差數列,第一項是a,從第二項開始,每項與前一項的差都是乙個定值b。如果用數學形式來表示,那麼可以表示成 a b x 其中 x 0,且是整數。例如 a 1,b 2,那麼這個等差數列就是 1,3,5,7,9 再給定乙個等比數列,第一項是c,從第二項開始,每項是前一項的d倍。如果用數學...
數學 (JZOJ) 普及模擬 單元格
題目描述 在乙個r行c列的 裡,我們要選出3個不同的單元格。但要滿足如下的兩個條件 1 選中的任意兩個單元格都不在同一行。2 選中的任意兩個單元格都不在同一列。假設我們選中的單元格分別是 a,b,c,那麼我們定義這種選擇的 費用 f a b f b c f c a 其中f a b 是指單元格a到單元...