zoukankan      html  css  js  c++  java
  • 1583: [Usaco2009 Mar]Moon Mooing 哞哞叫

    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 ),所以整个迭代式处于一个上升的阶段,也就是说问题就完全成了一个类似归并排序的东西了——直接两条线线性合并下搞定,时间复杂度( Oleft( N ight) )

     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.         
  • 相关阅读:
    Java最大栈深度有多大?-从一道面试题开始学习JVM
    高性能队列——Disruptor
    高性能的Redis之对象底层实现原理详解
    高性能的Redis之数据持久化小结
    高性能的Redis之数据结构小结
    Redis单线程为什么如此之快?
    kafka partition与 group的特性
    深扒Disruptor高性能的原因
    Python 元类编程实现一个简单的 ORM
    用vue.js实现的期货,股票的实时K线
  • 原文地址:https://www.cnblogs.com/HansBug/p/4412925.html
Copyright © 2011-2022 走看看