zoukankan      html  css  js  c++  java
  • Sandglass

    We have a sandglass consisting of two bulbs, bulb A and bulb B. These bulbs contain some amount of sand. When we put the sandglass, either bulb A or B lies on top of the other and becomes the upper bulb. The other bulb becomes the lower bulb.
    The sand drops from the upper bulb to the lower bulb at a rate of 1 gram per second. When the upper bulb no longer contains any sand, nothing happens.
    Initially at time 0, bulb A is the upper bulb and contains a grams of sand; bulb B contains X−a grams of sand (for a total of X grams).
    We will turn over the sandglass at time r1,r2,..,rK. Assume that this is an instantaneous action and takes no time. Here, time t refer to the time t seconds after time 0.
    You are given Q queries. Each query is in the form of (ti,ai). For each query, assume that a=ai and find the amount of sand that would be contained in bulb A at time ti.

    Constraints
    1≤X≤109
    1≤K≤105
    1≤r1<r2<..<rK≤109
    1≤Q≤105
    0≤t1<t2<..<tQ≤109
    0≤ai≤X(1≤i≤Q)
    All input values are integers.

    样例输入

    180
    3
    60 120 180
    3
    30 90
    61 1
    180 180
    

    样例输出

    60
    1
    120
    由于时间是递增的,所以不需要每一次查询都从头到尾遍历,而是维护一个0和x,最后在和A一起处理,最后加上ans是如果0和x存在斜率为0的时候,A斜率可能为1;
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100010;
    int a[maxn];
    int main()
    {
        int i,j,X,K,Q;
        scanf("%d%d",&X,&K);
        for(i=1; i<=K; i++)
            cin>>a[i];
        int L=0,R=X;
        int cnt=0,k=0,s=-1,x=0,ans,num;
        int t,A;
        scanf("%d",&Q);
        for(i=1; i<=Q; i++)
        {
           scanf("%d%d",&t,&A);
            while(k<K&&a[k+1]<=t)
            {
                ans=s*(a[k+1]-cnt);
                L=max(0,min(X,L+ans));
                R=max(0,min(X,R+ans));
                cnt=a[k+1];
                s=-s;
                x+=ans;
                k++;
            }
            num=t-cnt;
            A=max(L,min(R,A+x));
            A=max(0,min(X,A+s*num));
            printf("%d
    ",A);
        }
        return 0;
    }
    View Code
    
    
  • 相关阅读:
    qt 学习(三)消息基础
    qt学习(二)控件
    sqlserver学习_01
    java对文件操作--01
    js 将json字符串转换为json对象的方法解析
    实现动态代理(Java和spring)
    mysql_01_游标的使用
    java实现多文件上传01
    oracle-2_dblink的创建和使用
    sqlserver学习3---sql函数
  • 原文地址:https://www.cnblogs.com/nublity/p/9386416.html
Copyright © 2011-2022 走看看