1583: [Usaco2009 Mar]Moon Mooing 哞哞叫
1583: [Usaco2009 Mar]Moon Mooing 哞哞叫
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 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
4 3 3
17 8 2
Sample Output
65
HINT
Source
题解:难以想象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) \)
1 /************************************************************** 2 Problem: 1583 3 User: HansBug 4 Language: Pascal 5 Result: Accepted 6 Time:1304 ms 7 Memory:39288 kb 8 ****************************************************************/ 9 10 var 11 i,j,k,l,m,n,a1,b1,c1,a2,b2,c2,i1,i2:longint; 12 x1,x2:int64; 13 a:array[0..5000000] of int64; 14 begin 15 readln(m,n); 16 readln(a1,b1,c1); 17 readln(a2,b2,c2); 18 a[1]:=m;i:=2; 19 i1:=1;i2:=1; 20 x1:=(a1*m) div c1+b1; 21 x2:=(a2*m) div c2+b2; 22 while i<=n do 23 begin 24 if x1<x2 then 25 begin 26 if x1<>a[i-1] then 27 begin 28 a[i]:=x1; 29 inc(i); 30 end; 31 inc(i1); 32 x1:=(a[i1]*a1) div c1+b1; 33 end 34 else 35 begin 36 if x2<>a[i-1] then 37 begin 38 a[i]:=x2; 39 inc(i); 40 end; 41 inc(i2); 42 x2:=(a[i2]*a2) div c2+b2; 43 end; 44 end; 45 writeln(a[n]); 46 readln; 47 end.