其他分享
首页 > 其他分享> > Educational Codeforces Round 131 (Rated for Div. 2)

Educational Codeforces Round 131 (Rated for Div. 2)

作者:互联网

题目链接

A. Grass Field

 

B. Permutation

题意

回想一下长度的排列n是一个数组,其中每个元素来自1至n恰好发生一次。
对于一个固定的正整数d,让我们定义排列的值为长度p[n]中 pi⋅ d=pi+1 的数量.
例如,如果d= 3和p = [ 5 , 2 , 6 , 7 , 1 , 3 , 4 ], 那么这种排列的值是2, 因为p2⋅ 3 =p3和p5⋅ 3 =p6.
对于给定的值n, 求长度的排列n和价值d以最大可能的成本(通过所有方式选择排列和d)。
如果有多个答案,则打印其中任何一个。

思路

显然d=2时有最大值,从1开始依次输出即可,注意避免重复

代码

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
const ll N = 1e5, mod = 998244353;

void solve()
{
    int n;
    cin >> n;
    map<int, int> ma;
    cout << "2\n";
    for (int i = 1; i <= n; i++)
    {
        if (ma[i] == 1)
            continue;
        for (int j = i; j <= n; j = j * 2)
        {
            if (ma[j] == 1)
                break;
            ma[j] = 1;
            cout << j << " ";
        }
    }
    cout << endl;
}
int main()
{
    cin.tie(0), cout.tie(0);
    ios::sync_with_stdio(0);
    int T;
    cin >> T;
    while (T--)
        solve();
    return 0;
}

 

C. Schedule Management

题意

有n个工人和m个任务。工人编号从1至n. 每个任务都有一个精通该任务的工人。
每个任务都应该有一个工人分配给它。如果一个工人精通这项任务,需要1小时。否则需要2小时。
工人并行工作,彼此独立。每个工人一次只能完成一项任务。
将工作人员分配给所有任务,以便尽早完成任务。
工作在时间开始0. 完成所有任务的最短时间是多少?

思路

用一个数组s[n],记录第 i 工人有几个熟练的任务。

我用的方法是二分答案;

代码

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
const ll N = 2e6 + 233, mod = 998244353;
int s[N];
int n, m;
int chack(int x)
{
    ll a = 0, b = 0;
    for (int i = 1; i <= n; i++)
    {
        if (s[i] >= x)
            a += s[i] - x;
        else
        {
            int y = x - s[i];
            b += y / 2;
        }
    }
    if (a > b)
        return 0;
    else
        return 1;
}

void solve()
{

    cin >> n >> m;
    for (int i = 0; i <= m; i++)
        s[i] = 0;
    for (int i = 1; i <= m; i++)
    {
        int x;
        scanf("%d", &x);
        s[x]++;
    }
    int l = 1, r = m, mid = 0;
    int k = 0;
    while (l <= r)
    {
        mid = (r + l) >> 1;
        if (chack(mid))
        {
            k = mid;
            r = mid - 1;
        }
        else
        {
            l = mid + 1;
        }
    }
    printf("%d\n", k);
}
int main()
{
    // cin.tie(0), cout.tie(0);
    // ios::sync_with_stdio(0);
    int T;
    cin >> T;
    while (T--)
        solve();
    return 0;
}

 

标签:Educational,Rated,return,int,ll,Codeforces,long,cin,任务
来源: https://www.cnblogs.com/gosick-ll/p/16459998.html