ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Educational Codeforces Round 131 (Rated for Div. 2)

2022-07-09 01:01:08  阅读:162  来源: 互联网

标签:Educational Rated return int ll Codeforces long cin 任务


题目链接

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有