码迷,mamicode.com
首页 > Web开发 > 详细

http://codeforces.com/contest/535/problem/C

时间:2017-08-15 21:09:40      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:二分   table   include   phi   一个   main   next   span   png   

C. 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 issi?=?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 thatl?≤?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.

Examples
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

 题意:给一个等差数列,基为a,差为b,每次能对m个值减一,给出范围l,m,和次数t,求最能是得有边为0的最大值;

题解:二分找到符合的位置;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<fstream> 
#include<cmath> 
#include<string> 
#include<vector> 
#include<algorithm>
#include<string> 
#define ll long long
using namespace std;
ll a,b,n,m,l,t;
ll slove(ll x)
{
    ll ans=(a*2+(l+x-2)*b)*(x-l+1)/2;
    return ans;
}
bool judge(ll x)
{
    if(a+(x-1)*b>t)return true;
    if(slove(x)>t*m)return true;
    return false;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>a>>b>>n;
    while(n--)
    {
        cin>>l>>t>>m;
        if(a+(l-1)*b>t)
        {
            cout<<-1<<endl;continue;
        }
        ll L=l,R=1e9;
        while(R-L>=0)
        {
            ll mid=(R+L)>>1;
            if(judge(mid))
            {
                R=mid-1;
            }
            else
            {
                L=mid+1; 
            }
        } 
         cout<<L-1<<endl;
    }
    return 0;
}

 

http://codeforces.com/contest/535/problem/C

标签:二分   table   include   phi   一个   main   next   span   png   

原文地址:http://www.cnblogs.com/lhclqslove/p/7367433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!