codeforces 967 D Resource Distribution

移动UI自动化测试新框架Maestro:从原理到CI/CD集成的完整指南 移动UI自动化测试是保障应用质量、提升开发效率的关键环节,其核心在于模拟真实用户操作,验证应用界面的功能与交互。传统框架多采用命令式编程,要求开发者精确控制每一步操作,导致脚本冗长、维护成本高昂。随着DevOps和敏捷开发的普及,对测试的稳定性、编写效率及与CI/CD流水线的无缝集成提出了更高要求。声明式测试范式应运而生,它允许开发者专注于定义“期望状态”而非具体操作步骤,通过智能引擎自动处理元素定位、等待与重试,从而大幅提升脚本的健壮性和可读性。这一技术价值在于显著降低了UI自动化的门槛和维护负担,使其能 阅读详情

题目

One department of some software company has n servers of different specifications. Servers are indexed with consecutive integers from 1 to n. Suppose that the specifications of the j-th server may be expressed with a single integer number cj of artificial resource units.

In order for production to work, it is needed to deploy two services S1 and S2 to process incoming requests using the servers of the department. Processing of incoming requests of service Si takes xi resource units.

The described situation happens in an advanced company, that is why each service may be deployed using not only one server, but several servers simultaneously. If service Si is deployed using ki servers, then the load is divided equally between these servers and each server requires only xi/ki (that may be a fractional number) resource units.

Each server may be left unused at all, or be used for deploying exactly one of the services (but not for two of them simultaneously). The service should not use more resources than the server provides.

Determine if it is possible to deploy both services using the given servers, and if yes, determine which servers should be used for deploying each of the services.

Input
The first line contains three integers n, x1, x2 (2≤n≤300000, 1≤x1,x2≤109) — the number of servers that the department may use, and resource units requirements for each of the services.

The second line contains n space-separated integers c1,c2,...,cn (1≤ci≤109) — the number of resource units provided by each of the servers.

Output
If it is impossible to deploy both services using the given servers, print the only word “No” (without the quotes).

Otherwise print the word “Yes” (without the quotes).

In the second line print two integers k1 and k2 (1≤k1,k2≤n) — the number of servers used for each of the services.

In the third line print k1 integers, the indices of the servers that will be used for the first service.

In the fourth line print k2 integers, the indices of the servers that will be used for the second service.

No index may appear twice among the indices you print in the last two lines. If there are several possible answers, it is allowed to print any of them.

Examples

Input
6 8 16
3 5 2 9 8 7
Output
Yes
3 2
1 2 6
5 4

Input
4 20 32
21 11 11 12
Output
Yes
1 3
1
2 3 4

Input
4 11 32
5 5 16 16
Output
No

Input
5 12 20
7 8 4 11 9
Output
No

Note
In the first sample test each of the servers 1, 2 and 6 will will provide 8/3=2.(6) resource units and each of the servers 5, 4 will provide 16/2=8 resource units.

In the second sample test the first server will provide 20 resource units and each of the remaining servers will provide 32/3=10.(6) resource units.


分析

【题意】
给出n个服务器的资源数c1,c2,...,cn和运行2个程序需要的资源x1,x2,求一个解决方案

  • 选取k1个资源数不小于x1k1的服务器使资源总和不小于x1
  • 选取k2个资源数不小于x2k2的服务器使资源总和不小于x2
  • 两次选取的服务器不能有交叉

【分析】

  1. 服务器贪心:连续选择⌈x1cmin⌉个服务器
    假设对于x1已经选择了n个服务器,要求每个服务器的资源数都不小于x1n,只要最小的资源数不小于这个值就行了,也就是 cmin≥x1n⇒cmin⋅n≥x1。可以理解为,一个服务器的集合实际上最多提供cmin⋅n个资源。那么从贪心的角度,其他服务器在大于cmin的同时应该尽可能的小,如果把服务器按从大到小排序,就应该从cmin向左连续选n-1个。事实上,在从大到小排序的基础上,从一个点开始往左连续选择,那么这个点就是cmin,而我们只需要一共选择⌈x1cmin⌉个就足够让x1运行了。

  2. 如何寻找解:后分配的在左边继续寻找
    假设现在为x1分配服务器,想象所有的服务器按从大到小排成一列,如果从中间的某个地方开始往左选若干个出来,那么势必会将这个序列分割为两端,是不是应该到两边都试一下给x2分配服务器呢?
    list1

从cmin开始向左选择是,大小是递增的,每个服务器都一定会提供cmin个资源,所以总的个数是明确的,只需要判断一下左边有没有这个多服务器就能直到有没有解;但是向右选择,服务器越来越小,没有直接的依据应该截取到哪个位置,需要把右边都遍历完才能知道是否有解,复杂度很高,这样做显然不好。

既然向右寻找行不通,那么如果先给x1分配服务器了,再给x2分配就只能从x1的左边继续寻找。为了考虑x2在右边的情况,就让x2先分配,再让x1在x2的左边寻找(向左=低复杂度)。

【算法】
先尝试先分配x1,再分配x2,遍历所有位置i作为x1分配的起点,分配的终点就是i−⌈x1cmin⌉,再在分配终点继续向左为x2分配;
再尝试先分配x2,再分配x1,原理和上述一样。

我自己感觉,连续的分配是最贪心解,也是最优的解,如果有不是连续的分配,也一定可以通过交换变成连续的分配,因为分配的所有服务器,只有最右边的那一个在决定整体的大小,所以其实在它的左边选哪些服务器并不影响最后的大小,只要数量是⌈x1cmin⌉就行了。至于具体怎么证明就不会了。。。

代码

#include<stdio.h>
#include<algorithm>
using std::sort;

/*
 * 给c1, c2, ..., cn和x1, x2
 * 选取k1个不小于x1/k1的组成x1,再用剩下的选k2个不小于x2/k2的组成x2
 * 只需给出一个解
 * 
 */

#define maxn 300010
#define max(a,b) ((a)>(b)?(a):(b))
#define updiv(a,b) ((a)/(b)+(((a)%(b))!=0))
struct thing {
    int v;
    int id;
}c[maxn];   

bool cmp(thing t1,thing t2) {
        return t1.v>t2.v;
}
int n, a, b;
int k1, k2;
int main() {
    scanf("%d%d%d", &n, &a, &b);
    for(int i=1;i<= n;++i)
        scanf("%d", &c[i].v), c[i].id = i;
    sort(c + 1, c + n + 1,cmp);
    //尝试先分配a,再分配b
    for (int i = 1; i <= n; i++) {//只前i个能否构成解
        //以服务器i为下限组成a需要前k1个
        k1 = updiv(a, c[i].v);
        if (k1 >= i)continue;
        //把[i-k1+1,i]分配给a
        //以服务器i-k1为下限组成b需要前k2个
        k2 = updiv(b, c[i - k1].v);
        if (k2 > i - k1)continue;
        //把[i-k1-k2+1,i-k1]分配给b

        //分配成功
        printf("Yes\n%d %d\n", k1, k2);
        for (int t = i - k1 + 1; t <= i; ++t)printf("%d%c", c[t].id, t == i ? '\n' : ' ');
        for (int t = i-k1-k2+1; t <=i-k1; ++t)printf("%d%c", c[t].id, t == i-k1 ? '\n' : ' ');
        return 0;
    }

    //尝试先分配b,再分配a
    for (int i = 1; i <= n; i++) {//只前i个能否构成解
        //以服务器i为下限组成b需要前k2个
        k2 = updiv(b, c[i].v);
        if (k2 >= i)continue;
        //把[i-k2+1,i]分配给b

        //以服务器i-k2为下限组成a需要前k1个
        k1 = updiv(a, c[i - k2].v);
        if (k1 > i - k2)continue;
        //把[i-k2-k1+1,i-k2]分配给a

        //分配成功
        printf("Yes\n%d %d\n", k1, k2);
        for (int t = i-k2 - k1 + 1; t <= i-k2; ++t)printf("%d%c", c[t].id, t == i-k2 ? '\n' : ' ');
        for (int t = i-k2+1; t <= i; ++t)printf("%d%c", c[t].id, t == i ? '\n' : ' ');
        return 0;
    }
    printf("No");
    return 0;
}

【总结】
遇到直接做不好分析的问题,不妨先着眼于解空间的构成,如果是贪心问题,就更应该去思考最优解是怎样的存在,如何高效的构造出来才是问题的关键,如果做不到高效的构造,又怎么贪心呢。

手把手教你用STM32标准库写一个能OTA升级的Bootloader(附完整代码) 本文详细介绍了如何使用STM32标准库开发支持OTA无线升级的Bootloader系统,包括Flash分区规划、Bootloader核心实现、无线升级流程及安全校验机制。通过实战代码示例,帮助开发者快速掌握STM32固件升级技术,提升物联网设备的远程维护能力。 阅读详情

相关推荐

如何快速学习 PHP 编程:从入门到实战的高效路径

PHP高效学习路线摘要:4-8周掌握Web开发核心技能。阶段1(1周)搭建XAMPP/MAMP环境,掌握基础语法和变量处理;阶段2(2周)重点学习表单处理、会话管理和PDO数据库操作(防SQL注入);阶段3(2-3周)实战开发个人博客等小项目。关键原则:边学边练(每个知识点配3-5个案例)、优先掌握Web刚需技能(HTTP请求、数据库、动态页面)、善用官方手册。避坑点:密码必须加密、SQL使用预处理、统一UTF-8编码。建议每天2-3小时实操,通过项目驱动学习,快速形成开发能力。

2501_94233638的博客 1387

Resource Distribution (思维+贪心好题)

Resource Distribution One department of some software company has n servers of different specifications. Servers are indexed with consecutive integers from 1 to n. Suppose that the ...

codeswarrior的博客 608

【电弧故障检测算法全解析,电弧串扰问题分析和解决算法】

本文系统分析了电弧故障检测算法及串扰问题解决方案。电弧检测主要采用时频域分析和机器学习方法,通过提取高频噪声、波形畸变等特征实现故障识别。针对电弧串扰问题,提出了自适应滤波、盲源分离和时频联合分析等算法。研究给出了Python和C语言的算法实现示例,包括高频能量检测、过零率计算和陷波滤波器设计。最后指出算法优化方向:实时性提升可采用滑动窗口FFT和硬件加速;抗干扰增强需结合硬件滤波;机器学习扩展可引入随机森林等分类器。该研究为电弧故障检测系统开发提供了完整的技术路线。

syttt的专栏 891

Resource Distribution

贪心

a free man 750

PINN——加入物理约束的神经网络

【摘要】 基于物理信息的神经网络(Physics-informed Neural Network, 简称PINN),是一类用于解决有监督学习任务的神经网络,它不仅能够像传统神经网络一样学习到训练数据样本的分布规律,而且能够学习到数学方程描述的物理定律。与纯数据驱动的神经网络学习相比,PINN在训练过程中施加了物理信息约束,因而能用更少的数据样本学习到更具泛化能力的模型。本文主要解析这种神经网络以...

qq_39444290的博客 4582

在Mac上搭建本地AI工作流:Dify与DeepSeek的完美结合

本文介绍了在Mac上搭建本地AI工作流的方法,结合Dify平台和DeepSeek模型。Dify是一个开源的大语言模型应用开发平台,支持可视化AI应用开发。部署步骤包括:1)安装Homebrew和Docker;2)克隆Dify代码库;3)配置环境变量并启动服务。同时,使用Ollama工具本地部署DeepSeek模型,将其集成到Dify中创建聊天助手。通过配置模型接口和新建应用,用户可以在本地环境中实现AI对话功能。这种方案既保证了数据隐私,又提供了灵活的AI应用开发能力。

Linda的自动化测试之旅 1535

Codeforces 967 D. Resource Distribution

D. Resource Distributiontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOne department of some software company has nn servers of different specif...

maxdumbledore的博客 468

Vue3 - 最新实现在线预览Excel文件(xls/xlsx)多种方案,解析打开excel电子表格支持服务器链接在线URL形式、调用后端接口获取二进制文件流、文件地址(vue3实现excel预览)

vue3,预览excel文件,xlsx,xls,vue预览Excel表格,vue在线编辑xls文件,预览和编辑,vue3如何新开一页浏览器打开查看,手机h5页面打开在线EXCEL文档,在弹框中加载预览,在指定模态框中显示,基于Vue的Excel文件预览,加载失败白屏,报错没反应,详细示例代码教程,文件预览下载,nuxt3,excel预览插件,xlsx插件预览,纯前端vue中预览excel表格,接口调用的文件如何预览查看,文件url地址,vue移动端实现excel在线预览,vue移动端H5网页excel预览,

🏆 前端领域优质创作者 1万+

codeforcese 477 D.Resource Distribution

D. Resource Distributiontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOne department of some software company has nn servers of different specif...

~不可描述~ 418

若依框架二次开发——RuoYi-AI 本地部署流程

若依框架二次开发——RuoYi-AI 本地部署流程

bjzhang75的博客 1783

【UML】第12篇 序列图(1/2)——基本概念和构成

序列图(Sequence Diagram)是一种用于显示对象之间交互的图形化表示。它描述了在特定场景下,对象之间按照时间顺序进行的消息传递和协作过程。在序列图中,对象被表示为带有垂直虚线的矩形,虚线表示对象的生命周期。对象之间的交互通过箭头表示的消息来表示,箭头从一个对象的生命线指向另一个对象的生命线,表示消息的发送和接收。

AI人人懂 3045

CF 967D. Resource Distribution 暴力,二分

题意:n个服务器 第i个服务器最多能负载a[i]单元.现在有两个任务其值为s1,s2 若有一个任务值为S,分给k个服务器 则这k个服务器其a[i]值>=(S+k-1)/k   每台服务器最多运行一个任务.问任务s1,s2是否能通过这n个服务器运行起来. n 枚举任务1要用到x台服务器,那么这x台中最小的为val=(s1+x-1)/x  在a二分找到第一个>=val的下标i,此

noone0的博客 404

【ARM Trace32(劳特巴赫) 使用介绍 13 -- Trace32 Var 变量篇】

例如我们已经知道一个符号(可能是变量或者函数)的地址,怎么确定这个地址是一个变量还是一个函数呢?如果是变量的话,变量名是啥?变量定义的位置在哪?如果是函数,函数名是啥?函数定义的位置又在哪呢?查看结构体变量 str_t32 的值。例如我们已经知道了一个符号的地址为。在map文件中的地址为。

CodingCos的博客 2349

Resource Distribution CodeForces - 967D

D - Resource Distribution CodeForces - 967D 题意:S1,S2 是任务。任务量是x1,x2。现在有n个服务器,每个服务器的承载任务的容量是ci。任务可以分到 k 个服务器,每个服务器承载 x/k 的容量。要求 x/k <= xi 。问,怎么分配这n个服务器给这两个任务。 思路:贪心一下就好了。给 ci 排序从大到小,再优先给 S1 分配服...

DeathYmz的博客 714

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

CodeForces - 967D Resource Distribution(贪心+二分+构造)

题目链接:点击查看 题目大意:给出 n 个机器,每个机器可以处理 a[ i ] 的工作,现在有两个工作需要处理,工作量分别为 x1 和 x2,可以将一个工作分配给 k 个机器同时完成,需要满足: k 个机器都需要满足 每个机器只能处理一个工作 题目要求输出一种合适的构造方案,如果无解输出 No 题目分析:首先预处理出 a[ i ] 和 b[ i ] ,分别代表将 x1 和 x2 分配给 i 个机器所需要的最低下限 然后设题目中的 a[ i ] 为 c[ i ] (避免与上面的两个变量重名),代表

Falcon的博客 498

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3) D. Resource Distribution

D. Resource Distributiontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOne department of some software company has nn servers of different specif...

albertluf的博客 273

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Codeforces 976D - Resource Distribution(贪心 + 二分)

题目链接 http://codeforces.com/contest/967/problem/D 题目大意 能否用n个服务器同时为两个任务分配资源。 用k个服务器分配任务量为S的任务时,占用每个服务器S/k1的资源。 每个服务器只能分配到一个任务。 解题思路 降维,优先将大额服务器分配给一个任务,再枚举另一个任务需要的服务器数。 比如,优先将k1个大额的服务...

Hrbust_cx的博客 520

Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3) D. Resource Distribution (枚举)

传送门:http://codeforces.com/contest/967/problem/D题目大意:  有两个任务分别需要x1,x2的资源,现在有n台服务器,分别提供si的资源。现在将这n台服务器分配给这两个任务(可以不分完),设分给第一个k1台,第二个k2台,需要满足对于每个分配给任务1的服务器,都有si&gt;=x1/k1;任务2同理。求能否分配,如果能分配,则输出分配的方法。思路:  先...

__喵喵喵的博客 228

codeforces round477

codeforces round477 好久没打cf了,回来打一场,pp了4个题的fst了三个,掉了100多分。 好像cf已经三连掉从接近2000掉到1700+了。 老年选手打什么cf嘛。 题目链接:http://codeforces.com/contest/967 A. Mind the Gap (cf 967A) 傻逼题。 因为s等于60然后还要多加1,然后只进了一次位,然后就f...

某蒟蒻的博客 434

codeforces 798 D. Mike and distribution 二维贪心

题目传送门 D. Mike and distribution time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Mike has alwa

twh233的算法blog 626

Codeforces Round #410 (Div. 2) D. Mike and distribution 思维

D. Mike and distribution time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Mike has always been thinking abou

jerans的博客 608

【枚举】【二分】Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3) D. Resource Distribution...

题意:有两个服务要求被满足,服务S1要求x1数量的资源,S2要求x2数量的资源。有n个服务器来提供资源,第i台能提供a[i]的资源。当你选择一定数量的服务器来为某个服务提供资源后,资源需求会等量地分担给它们,要求每台服务器承担的资源需求不超过其所能提供的资源需求。给定一种合法的方案,每台服务器要么没有被分配给任何一个服务,或者被分配给其中一个服务。 对服务器按能提供的资源从小到大排序。枚举给S1...

weixin_34406796的博客 87

Codeforces Round #477 (rated, Div. 2)

C. 题目主要考察阅读理解。 对于每一组问询,答案肯定是水平走一段+电梯/楼梯走一段组合而成。之前考虑的是 有没有可能做一段电梯然后走最后一截楼梯,不过从各种别人的代码来看似乎不需要考虑这点?似乎只要对于每个问询,把离起点最近的两个电梯/楼梯都二分抓出来算一下就行了。 特别注意要特判那些两点在同一层的坑爹情况… #include&lt;cstdio&gt; #include&lt;algo...

HumveeA6的博客 241

Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)题解

A. Protect Sheep 只要wolf的四邻接格子中没有sheep,则肯定有办法放狗使得狼无法接触到羊,把所有空格替换成狗就行了。 #include &lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; const int maxn=505; const int maxm=100005; const int...

Sega_hsj 's Blog 645

codeforces884D(大概是构造,优先队列)

<回头补题意和分析> WA代码(没有用优先队列):#include<bits/stdc++.h> using namespace std; vector<int> a; int main(){ int n; long long ans=0; cin>>n; for(int i=1;i<=n;i++){ int num; cin>>nu

雪霜贸贸,荠麦之茂 826

CodeForces round 967 div2 题解(A~E)

本来准备比完赛就写题解的, 但是一拖拖了一星期, 唉最后一题没搞懂怎么做,恳请大神指教欢迎大家在评论区提问.AMind the Gap稳定版题面 https://cn.vjudge.net/problem/CodeForces-967A水题, 不写题解了, 浪费空间细节处理见代码#include&lt;bits/stdc++.h&gt; #define int long long using na...

shleodai的博客 635
上一篇: codeforces 961 E Tufurama
下一篇: CF 954C Matrix Walk
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值