NOIP2012模擬10 6 購買

2021-07-23 09:46:49 字數 2062 閱讀 3228

description

小n 最近迷上了購物每天都讓小a 和小t 陪她逛街拿東西。最近商店出了這樣的乙個

活動:買東西送積分,就是買一件物品,送當前物品的積分ci*當前的倍率,初始倍率是1;

input

第一行有乙個整數n表示要買的種類。

接下來n行每行2個整數ki,ci表示數量和積分

接下來一行有乙個正整數t表示獎勵的倍數

接下來一行有t個遞增的整數ti表示買了ti個物品之後以後買的物品得到的積分倍率將是(i+1)

output

乙個整數,表示小n能得到的最多積分
題解

從小到大排序,貪心策略。
**

var

ans,sum:int64;

n,m:longint;

ki,ci,t:array [1..101] of int64;

procedure

init;

var i,j:longint;

begin

readln(n);

sum:=0;

for i:=1

to n do

begin

readln(ki[i],ci[i]);

sum:=sum+ki[i];

end;

readln(m);

for i:=1

to m do

read(t[i]);

for i:=2

to m do

for j:=1

to i-1

do t[i]:=t[i]-t[j];

end;

procedure

qsort

(l,r:longint);

var i,j:longint;

mid,tt:int64;

begin

if l>=r then

exit;

i:=l; j:=r;

mid:=ci[(l+r) div

2]; repeat

while ci[i]do inc(i);

while ci[j]>mid do dec(j);

if i<=j then

begin

tt:=ci[i]; ci[i]:=ci[j]; ci[j]:=tt;

tt:=ki[i]; ki[i]:=ki[j]; ki[j]:=tt;

inc(i); dec(j);

end;

until i>j;

qsort(i,r);

qsort(l,j);

end;

procedure

main;

var p,q,ti,i:longint;

k:int64;

begin

k:=0; ans:=0;

p:=1; q:=1; ti:=1;

while kdo

begin

if t[p]then

begin

ans:=ans+t[p]*ci[q]*ti;

ki[q]:=ki[q]-t[p];

inc(ti);

k:=k+t[p];

inc(p);

endelse

begin

ans:=ans+ki[q]*ci[q]*ti;

t[p]:=t[p]-ki[q];

k:=k+ki[q];

inc(q);

end;

if p>m then

begin

for i:=q to n do

ans:=ans+ci[i]*ki[i]*ti;

k:=sum;

end;

end;

write(ans);

end;

begin

init;

qsort(1,n);

main;

end.

NOIP2012模擬10 6 購買

description 小n 最近迷上了購物每天都讓小a 和小t 陪她逛街拿東西。最近商店出了這樣的乙個 活動 買東西送積分,就是買一件物品,送當前物品的積分ci 當前的倍率,初始倍率是1 當倍率是i 的時候,如果你買的物品等於ti 個,那麼倍率將加1.最多積分的人可以得到超限 量版的圓神手辦。小n...

NOIP2012模擬10 6 填充棋盤

description 橫一劃豎一劃,橫一劃豎一劃 小r畫出了乙個n m的棋盤。由於noip快要到了,小r有了乙個奇妙的想法。在棋盤的每乙個小方格中填入n,o,i,p這4個字母中的乙個,若棋盤中每乙個2 2的小棋盤中都有n,o,i,p這4個字母,小r就認為這個棋盤是幸運棋盤。小r想知道一共有多少種不...

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 x x.第...