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 }
  • 相关阅读:
    公司技术的确定
    数据结构
    如何利用百度ocr实现验证码自动识别
    redis 主从复制
    redis哨兵机制
    redis集群搭建
    webmagic自定义存储(mysql、redis存储)
    redis安装与使用
    maven插件mybatis-generator自动生成代码
    python 中的“集合”(list、tuple、set、dict)
  • 原文地址:https://www.cnblogs.com/xz816111/p/4439505.html
Copyright © 2011-2022 走看看