zoukankan      html  css  js  c++  java
  • ural1316 Electronic Auction

    Electronic Auction

    Time limit: 0.5 second
    Memory limit: 64 MB
    There is a deficit in cast-iron pigs in the country. They are sold at an electronic auction. Customers make their bids: announce a price at which they are ready to buy a pig. From time to time a seller puts up for sale К pigs at a price of X bibriks each. The first К customers who offered the same or higher price get one pig each.
    Customers may cancel their bids (after a purchase a bid remains valid until it is canceled). Only bids made in a current month are valid, so each month a customer should renew his bid. If a seller did not sell all the pigs offered for sale, then the unsold pigs remain at his storehouse and don’t participate in the auction any more.
    Each sold cast-iron pig makes a profit of 0.01 bibriks for the auction. Having a month's log of auction operations, you are to calculate the profit of the auction in this month.

    Input

    The input contains a month's operations log, one operation per line. There are three types of operations:
    • “BID X” — a customer announces that he is ready to buy a pig at a price of X bibriks;
    • “DEL X” — a customer cancels his bid for a pig at a price of X bibriks;
    • “SALE X K” — a seller puts up for sale К pigs at a price of X bibriks.
    X is between 0.01 and 10000.00 bibriks and has at most 2 digits after the decimal point. K is an integer between 1 and 100000. The number of operations does not exceed 100000. All operations are correct. The last line contains the word “QUIT”.

    Output

    Output the profit of the auction in the current month with 2 digits after the decimal point.

    Sample

    inputoutput
    BID 0.01
    BID 10000
    BID 5000
    BID 5000
    SALE 7000 3
    DEL 5000
    SALE 3000 3
    SALE 0.01 3
    QUIT
    0.06

    分析:离散化+树状数组;

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <hash_map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define vi vector<int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    #define pii pair<int,int>
    #define Lson L, mid, rt<<1
    #define Rson mid+1, R, rt<<1|1
    const int maxn=1e5+10;
    const int dis[][2]={0,1,-1,0,0,-1,1,0};
    using namespace std;
    using namespace __gnu_cxx;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p%mod;p=p*p%mod;q>>=1;}return f;}
    int n,m,k,t,a[maxn],num;
    double c[maxn];
    ll ans;
    struct node
    {
        char a[10];
        double b;
        int c;
    }op[maxn];
    void add(int x,int y)
    {
        for(int i=x;i<=num;i+=(i&(-i)))
        {
            a[i]+=y;
        }
    }
    int get(int x)
    {
        int ans=0;
        for(int i=x;i;i-=(i&(-i)))
            ans+=a[i];
        return ans;
    }
    int main()
    {
        int i,j;
        while(~scanf("%s",op[++n].a)&&op[n].a[0]!='Q')
        {
            scanf("%lf",&op[n].b);
            c[n]=op[n].b;
            if(op[n].a[0]=='S')scanf("%d",&op[n].c);
        }
        n--;
        sort(c+1,c+n+1);
        num=unique(c+1,c+n+1)-c-1;
        rep(i,1,n)op[i].b=lower_bound(c+1,c+num+1,op[i].b)-c;
        rep(i,1,n)
        {
            if(op[i].a[0]=='B')add((int)op[i].b,1);
            else if(op[i].a[0]=='D')add((int)op[i].b,-1);
            else ans+=min(op[i].c,get(num)-get((int)op[i].b-1));
        }
        printf("%.2f
    ",(double)ans/100);
        //system("Pause");
        return 0;
    }
  • 相关阅读:
    【笔记】进化型开发方法
    错误注入学习笔记
    【C/C++】关于编译错误 "error C2146: syntax error : missing ';' before identifier 'xxx'"
    查找进程加载到内存中的EntryPoint
    devepxress qtp 点击子菜单
    RijndaelManaged 自定义key和iv
    sql server transaction
    使用gzip压缩字符串
    tsql 与时间(周)相关的一些操作
    excel 合并单元格
  • 原文地址:https://www.cnblogs.com/dyzll/p/5831082.html
Copyright © 2011-2022 走看看