• J


    Avin meets a rich customer today. He will earn 1 million dollars if he can solve a hard problem. There are n warehouses and m workers. Any worker in the i-th warehouse can handle ai orders per day. The customer wonders whether there exists one worker assignment method satisfying that every warehouse handles the same number of orders every day. Note that each worker should be assigned to exactly one warehouse and no worker is lazy when working.

    Input

    The first line contains two integers n (1 ≤ n ≤ 1, 000), m (1 ≤ m ≤ 1018). The second line contains n integers. The i-th integer ai (1 ≤ ai ≤ 10) represents one worker in the i-th warehouse can handle ai orders per day.

    Output

    If there is a feasible assignment method, print "Yes" in the first line. Then, in the second line, print n integers with the i-th integer representing the number of workers assigned to the i-th warehouse.
    Otherwise, print "No" in one line. If there are multiple solutions, any solution is accepted.

    Sample Input

    2 6
    1 2
    2 5
    1 2
    Sample Output

    Yes
    4 2
    No

    题意:n个仓库,m个工人,每个仓库有一个派单速度,问:能否合理的分配每个工人,使得每个仓库一天的派单量相同。若能,输出分配方法

    题解:求出n个派单速度的最小公倍数p,如果m%n==0,则合理分配

    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #define ll long long
    using namespace std;
    ll n, m;
    ll p[1005];
    ll gcd(ll a, ll b)//最大公约数
    {
        return b == 0 ? a : gcd(b, a % b);
    }
    
    ll lcm(ll a, ll b)//最小公倍数
    {
        return a / gcd(a, b) * b;
    }
    int main()
    {
        while (cin >> n >> m) 
        {
            for (ll i = 1; i <= n; i++)
                cin >> p[i];
            ll temp = p[1];
            for (ll i = 2; i <= n; i++)
            {
                temp = lcm(temp, p[i]);
            }
    
            ll cnt = 0, flag = 0, d;
            for (ll i = 1; i <= n; i++)
                cnt = cnt + temp / p[i];
            if (m%cnt != 0)
                flag = 1;
            else
                d = m / cnt;
            if (flag == 0)
            {
                cout << "Yes" << endl;
                for (ll i = 1; i <= n; i++)
                {
                    if (i != n)
                        cout << temp / p[i] * d << ' ';
                    else
                        cout << temp / p[i] * d << endl;
                }
            }
            else
                cout << "No" << endl;
        }
        return 0;
    }



  • 相关阅读:
    Velocity(7)——#foreach指令
    如何修改Struts2 FiledError样式
    Mysql:User does not have access to metadata required to determine stored procedure parameter types.
    Velocity(8)——引入指令和#Stop指令
    GUI设计禁忌 之一 ——使用了错误的控件
    GUI设计禁忌——基本原则
    Velocity(9)——宏
    CentOS NFS配置
    Velocity(10)——指令的转义
    从HTML到SSI框架
  • 原文地址:https://www.cnblogs.com/-citywall123/p/11234481.html
Copyright © 2020-2023  润新知