zoukankan      html  css  js  c++  java
  • cf 865 B. Ordering Pizza

    B. Ordering Pizza

    It's another Start[c]up finals, and that means there is pizza to order for the onsite contestants. There are only 2 types of pizza (obviously not, but let's just pretend for the sake of the problem), and all pizzas contain exactly S slices.

    It is known that the i-th contestant will eat si slices of pizza, and gain ai happiness for each slice of type 1 pizza they eat, and bi happiness for each slice of type 2 pizza they eat. We can order any number of type 1 and type 2 pizzas, but we want to buy the minimum possible number of pizzas for all of the contestants to be able to eat their required number of slices. Given that restriction, what is the maximum possible total happiness that can be achieved?

    Input

    The first line of input will contain integers N and S (1 ≤ N ≤ 105, 1 ≤ S ≤ 105), the number of contestants and the number of slices per pizza, respectively. N lines follow.

    The i-th such line contains integers si, ai, and bi (1 ≤ si ≤ 105, 1 ≤ ai ≤ 105, 1 ≤ bi ≤ 105), the number of slices the i-th contestant will eat, the happiness they will gain from each type 1 slice they eat, and the happiness they will gain from each type 2 slice they eat, respectively.

    Output

    Print the maximum total happiness that can be achieved.

    Examples
    Input
    3 12
    3 5 7
    4 6 7
    5 9 5
    Output
    84
    Input
    6 10
    7 4 7
    5 8 8
    12 5 8
    6 11 6
    3 3 7
    5 9 6
    Output
    314
    Note

    In the first example, you only need to buy one pizza. If you buy a type 1 pizza, the total happiness will be 3·5 + 4·6 + 5·9 = 84, and if you buy a type 2 pizza, the total happiness will be 3·7 + 4·7 + 5·5 = 74.

    在买的披萨数量最少的前提下幸福度最大。

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <cstdlib>
    #include <iomanip>
    #include <cmath>
    #include <cassert>
    #include <ctime>
    #include <cstdlib>
    #include <windows.h>
    #include <map>
    #include <set>
    using namespace std;
    #pragma comment(linker, "/stck:1024000000,1024000000")
    #define lowbit(x) (x&(-x))
    #define max(x,y) (x>=y?x:y)
    #define min(x,y) (x<=y?x:y)
    #define MAX 100000000000000000
    #define MOD 1000000007
    #define pi acos(-1.0)
    #define ei exp(1)
    #define PI 3.1415926535897932384626433832
    #define ios() ios::sync_with_stdio(true)
    #define INF 1044266558
    #define mem(a) (memset(a,0,sizeof(a)))
    typedef long long ll;
    ll n,s,m,a,b,cnta=0,cntb=0;
    ll ans=0,pos=0,inf=0;
    vector<pair<ll,ll> >v[2];
    int main()
    {
        scanf("%lld%lld",&n,&s);
        for(int i=0;i<n;i++)
        {
            scanf("%lld%lld%lld",&m,&a,&b);
            if(a>=b) ans+=m*a,cnta=(cnta+m)%s,v[0].push_back(make_pair(a-b,m));
            else ans+=m*b,cntb=(cntb+m)%s,v[1].push_back(make_pair(b-a,m));
        }
        sort(v[0].begin(),v[0].end());
        sort(v[1].begin(),v[1].end());
        if(cnta+cntb>s) return 0*printf("%lld
    ",ans);
        for(int i=0;i<v[0].size();i++)
        {
            pos+=min(v[0][i].second,cnta)*v[0][i].first;
            cnta-=min(cnta,v[0][i].second);
        }
        for(int i=0;i<v[1].size();i++)
        {
            inf+=min(v[1][i].second,cntb)*v[1][i].first;
            cntb-=min(cntb,v[1][i].second);
        }
        printf("%lld
    ",ans-min(inf,pos));
        return 0;
    }
  • 相关阅读:
    JGUI源码:右键菜单实现(12)
    JGUI源码:开发中遇到的问题(11)
    JGUI源码:prefixfree 这个库有时候会引起网页一直加载中(10)
    Ext.net按钮事件中使用Response.Redirect的一个问题
    JGUI源码:Tab组件实现(9)
    IE7下使用兼容Icon-Font CSS类
    JGUI源码:JS菜单动态绑定(8)
    JGUI源码:组件及函数封装方法(7)
    JQuery对象关系图
    JGUI源码:Accordion折叠到侧边栏实现(6)
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7646204.html
Copyright © 2011-2022 走看看