• 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;
    }
  • 相关阅读:
    GSI发布EnCase 6.19版本
    [EnCase v7] EnCase v7 使用问题小结
    WebForm和WinForm通用的取当前根目录的方法
    存储过程示例临时表代替游标
    自定义协议的注册及程序示例(C#)
    关于System.Web.HttpContext.Current.Session 为 null的问题
    存储过程调用DTS包实现大批量数据导入
    Ext.app.SearchField在IE8中显示异常的问题
    用于 Windows Server 2003 的远程桌面连接 (Terminal Services Client 6.0) (KB925876)
    一段没有看懂的JS代码
  • 原文地址:https://www.cnblogs.com/dyzll/p/5831082.html
Copyright © 2020-2023  润新知