您的位置:首页 > 其它

1583: [Usaco2009 Mar]Moon Mooing 哞哞叫

2015-04-09 23:04 253 查看

1583: [Usaco2009 Mar]Moon Mooing 哞哞叫

Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 244 Solved: 126
[Submit][Status][Discuss]

Description



Input

第一行两个数,C和N

第二行3个数,a1,b1,c1 第三行3个数,a2,b2,c2

Output

一个整数代表最长的那一次嚎叫

Sample Input

3 10

4 3 3

17 8 2

Sample Output

65

HINT

Source

Gold

题解:难以想象USACO竟然有此般水题,更何况还是GOLD DIVISION。。。(PS:但是我会告诉你我不仅仅第一反应是用堆做,而且还逗比了一次——忘开int64了TT)

其实,由于题目中说了\( d_1 \leq a_1 \)和\( d_2 \leq a_2 \),所以满足\( \frac{a_1}{d_1} \geq 1 \)和\( \frac{a_2}{d_2} \geq 1 \),所以整个迭代式处于一个上升的阶段,也就是说问题就完全成了一个类似归并排序的东西了——直接两条线线性合并下搞定,时间复杂度\( O\left( N \right) \)

/**************************************************************
Problem: 1583
User: HansBug
Language: Pascal
Result: Accepted
Time:1304 ms
Memory:39288 kb
****************************************************************/

var
i,j,k,l,m,n,a1,b1,c1,a2,b2,c2,i1,i2:longint;
x1,x2:int64;
a:array[0..5000000] of int64;
begin
readln(m,n);
readln(a1,b1,c1);
readln(a2,b2,c2);
a[1]:=m;i:=2;
i1:=1;i2:=1;
x1:=(a1*m) div c1+b1;
x2:=(a2*m) div c2+b2;
while i<=n do
begin
if x1<x2 then
begin
if x1<>a[i-1] then
begin
a[i]:=x1;
inc(i);
end;
inc(i1);
x1:=(a[i1]*a1) div c1+b1;
end
else
begin
if x2<>a[i-1] then
begin
a[i]:=x2;
inc(i);
end;
inc(i2);
x2:=(a[i2]*a2) div c2+b2;
end;
end;
writeln(a
);
readln;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: