zoukankan      html  css  js  c++  java
  • CF Tavas and Karafs (二分)

    Tavas and Karafs
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Karafs is some kind of vegetable in shape of an 1 × h rectangle. Tavaspolis people love Karafs and they use Karafs in almost any kind of food. Tavas, himself, is crazy about Karafs.

    Each Karafs has a positive integer height. Tavas has an infinite 1-based sequence of Karafses. The height of the i-th Karafs is si = A + (i - 1) × B.

    For a given m, let's define an m-bite operation as decreasing the height of at most m distinct not eaten Karafses by 1. Karafs is considered as eaten when its height becomes zero.

    Now SaDDas asks you n queries. In each query he gives you numbers lt and m and you should find the largest number r such that l ≤ r and sequence sl, sl + 1, ..., sr can be eaten by performing m-bite no more than t times or print -1 if there is no such number r.

    Input

    The first line of input contains three integers AB and n (1 ≤ A, B ≤ 106, 1 ≤ n ≤ 105).

    Next n lines contain information about queries. i-th line contains integers l, t, m (1 ≤ l, t, m ≤ 106) for i-th query.

    Output

    For each query, print its answer in a single line.

    Sample test(s)
    input
    2 1 4
    1 5 3
    3 3 10
    7 10 2
    6 4 8
    output
    4
    -1
    8
    -1
    input
    1 5 2
    1 5 10
    2 7 4
    output
    1
    2

    今天才发现比赛时候的算法是对的。。。只不过数据爆了,改成long long就过了,还重新找题解写了一次。。。。

    不过新写的更快一点,130ms,二分查找,下界为L,二分查上界,上界的初始值可以算出来。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <cstdio>
     5 #include <ctime>
     6 using    namespace    std;
     7 
     8 long long    bsearch(long long,long long,long long);
     9 
    10 long long    A,B;
    11 int        main(void)
    12 {
    13     long long    l,t,m,r;
    14     long long    n;
    15     
    16     scanf("%lld%lld%lld",&A,&B,&n);
    17     while(n --)
    18     {
    19         scanf("%lld%lld%lld",&l,&t,&m);
    20         if(t < A + (l - 1) * B)
    21         {
    22             puts("-1");
    23             continue;
    24         }
    25         r = bsearch(l,t,m);
    26         printf("%lld
    ",r);
    27     }
    28     
    29     return    0;
    30 }
    31 
    32 long long    bsearch(long long l,long long t,long long m)
    33 {
    34     long long    low = l;
    35     long long    high = (t - A) / B + 1;
    36 
    37     while(low <= high)
    38     {
    39         long    long    mid = (low + high) / 2;
    40         long    long    box = (A + (l - 1) * B + A + (mid - 1) * B) * (mid - l + 1) / 2;
    41 
    42         if(box <= m * t)
    43             low = mid + 1;
    44         else
    45             high = mid - 1;
    46     }
    47 
    48     return    low - 1;
    49 }
  • 相关阅读:
    ping 的零碎知识
    dhcp问题
    Apache相关知识与配置
    Android || IOS录制mp3语音文件方法
    Sheet can not be presented because the view is not in a window的解决办法,和window的简单使用
    测试题1 IOS面试基础题
    IOS 封装类的时候注释格式,使用的时候可以想官方库一样快捷显示
    IOS 用正则表达式解析HTML等文件,得到所有文本
    IOS源码封装成.bundle和.a文件时,使用单例作为出口的写法!任何封装都建议使用这种方法作为出口
    XMLParser解析xml--内容源自网络(在静态库中不能用GDATA来解析,因为静态库不能加动态库)
  • 原文地址:https://www.cnblogs.com/xz816111/p/4439505.html
Copyright © 2011-2022 走看看