牛客-模拟、枚举与贪心 2022.10.23

CFLP问题的贪心算法和模拟退火法解决方案 用贪心算法和模拟退货法解决CFLP问题 首先问题描述如下: 给定n个工厂和m个顾客,开工厂需要一定的费用,一个工厂有一定的容量限制,每个顾客也有一定的需求,而每个顾客要选取某个工厂也需要一定的分配费用,现在要求找出一个分配方案,把顾客分配给不同的工厂,然后在可以满足所有顾客需求的前提下让所有的花费(开工厂的花费和分配的花费)最小。 这显然是一个NP-hard问题,因为情况数非常的多,而且也没有什么... 阅读详情

强迫症的序列

找到相加规则。先对数组按照从小打到排序,第一次,先让第一个数和第二个数大小相等,即相加的n-1个数只除了第二个数字,第二次,让第一第二个数和第三个数大小相等,即相加的n-1个数只除了第三个数字,之后每次相加同理,相加n-1次,即可得到答案,最后的结果就是最大的数字加上每次两个数字的差值,做一个前缀和相加。

#include<bits/stdc++.h>
using namespace std;
int main() {
    int t;
    cin >> t;
    while(t--) {
        int n;
        cin >> n;
        vector<int> p(n, 0);
        for(int i = 0; i < n; i++)
            cin >> p[i];
        sort(p.begin(), p.end());
        int res = 0;
        for(int i = 1; i < n; i++) {
            p[i] += res;
            int tmp = p[i] - p[i - 1];
            res = res + tmp;
        }
        cout << res << " " << p[n - 1] << endl;
    }
    return 0;
}

强迫症

这道题借用了题解中的解题思路。这里参考一下,

一开始的想法是从前往后相加相同的数字,然后删除,但是会导致之后的数字也相同,导致并不是最少的次数。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    map<int, int> p;
    for(int i = 0; i < n; i++) {
        int a;
        cin >> a;
        p[a] += 1;
    }
    int res = 0;
    for(map<int,int>::iterator iter = p.begin(); iter != p.end(); iter++)
        res = res + iter->second - 1;
    cout << res << endl;
    return 0;
}

 Shopping

简单模拟输出,一眼可知,凳子消除最贵的商品,所以比较凳子和购物车两者的最小值,即可以得到最终的结果。

#include <bits/stdc++.h>
using namespace std;
struct node {
    double value;
    int desk;
};
bool cmp(const struct node& a, const struct node& b) {
    return a.value < b.value;
}
int main() {
    int t;
    cin >> t;
    while(t--) {
        int n, m;
        cin >> n >> m;
        vector<node> p;
        int desknum = 0;
        for(int i = 0; i < n; i++) {
            struct node k;
            cin >> k.value >> k.desk;
            p.emplace_back(k);
            if(k.desk == 1)
                desknum += 1;
        }
        sort(p.begin(), p.end(), cmp);
        double res = 0.0;
        int idx = n - 1;
        for(int i = 0; i < min(desknum, m); i++)
            res = res + p[idx--].value / 2.0;
        while(idx >= 0)
            res = res + p[idx--].value;
        printf("%.1lf\n", res);
    }
    return 0;
}

Eustia of the Tarnished Wings

从小到大排序,然后选择区间最小最大差值为k以下的,包含最多数的区间即可。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    vector<int> p(n, 0);
    for(int i = 0; i < n; i++)
        cin >> p[i];
    sort(p.begin(), p.end());
    int res = 0;
    for(int i = 1; i < n; i++) {
        int pre = i;
        while(abs(p[i] - p[i - 1]) <= m && i < n)
            i += 1;
        if(pre == i)
            res += 1;
        else
            i -= 1;
    }
    cout << res + 1 << endl;
    return 0;
}

Mountain

我记得,这是一道,2019年CCPC江西省赛的赛题,签到题。结果就是数组最大值的两倍,因为包含上山和下山。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> p(n, 0);
    int res = 0;
    for(int i = 0; i < n; i++) {
        cin >> p[i];
        res = max(res, p[i]);
    }
    cout << res * 2 << endl;
    return 0;
}

纸牌游戏

最大最小值相减即可得到答案

组队

同样是求区间最小最大差值为k,包含最多的数,之前有相同题目。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int t;
    cin >> t;
    while(t--) {
        int n, k;
        cin >> n >> k;
        vector<int> p(n, 0);
        for(int i = 0; i < n; i++)
            cin >> p[i];
        sort(p.begin(), p.end());
        int res = 0;
        for(int i = 0; i < n; i++) {
            int idx = lower_bound(p.begin(), p.end(), p[i] + k) - p.begin();
            int sum = idx - i;
            if(p[idx] - p[i] == k)
                sum += 1;
            res = max(res, sum);
        }
        cout << res << endl;
    }
    return 0;
}

牛牛玩平板

每次合并两个最大值即可。即排序数组的最后两个数字。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> p;
    for(int i = 0; i < n; i++) {
        int a;
        cin >> a;
        p.emplace_back(a);
    }
    sort(p.begin(), p.end());
    int res = 0;
    for(int i = n - 1; i >= 1; i--) {
        int a = p[p.size() - 1];
        p.pop_back();
        int b = p[p.size() - 1];
        p.pop_back();
        res = res + a * b;
        p.emplace_back(a + b);
    }
    cout << res << endl;
    return 0;
}

保姆级教程:用CH34xSerCfg工具修改USB转串口芯片的VID/PID,避免驱动冲突 本文详细介绍了如何使用CH34xSerCfg工具修改USB转串口芯片的VID/PID,解决驱动冲突问题。通过实战案例和配置技巧,帮助开发者高效管理嵌入式设备,避免常见的USB设备识别问题,提升开发效率。 阅读详情

相关推荐

PYTHON 打印三角形大全

用PYTHON语言打印各种三角形

世上无难事,只要肯攀登 1万+

模拟,贪心,枚举

文件第二次被毁之后我乖乖的学会了该弃坑就弃坑,Typora,没想到你是这样的编辑软件,写了3500+说没就没了。博客园大爱,还给自动保存。 进入正题 ###二、模拟枚举贪心 模拟,枚举,贪心。这三者算是从语言基础向算法设计的一个过渡,刚刚完成了C++语言基础学习的各位也算是正式步入了算法竞赛的殿堂,那么下面就由笔者带领大家向梦想更深处前行。——题记 ####本章简介 模拟、枚举...

baipan1450的博客 424

point transformer v3结构

分割结构: embedding->enc->dec embedding->enc0->enc1->enc2->enc3->enc4->dec3->dec2->dec1->dec0 embedding ->block0->block1 ->dow->block0->block1 ->dow->block0->block1 ->dow->block0->block1-&gt

weixin_45625419的博客 581

Eustia of the Tarnished Wings

链接:https://www.nowcoder.com/acm/contest/201/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bit IO Format: %lld 题目描述 Novus Aither是一个潜藏着多个势力的城市。每个势力都有一个唯一的领导人,每个领导人有一个属性值。如果两个势力的领导人...

ityanger的技术栈 2348

如何获取SAP BTP账户及BAS启用

返回到 Service Marketplace 点击SAP Business Application Studio 然后go to Application。进入子用户的OverView里面找到Entitlements添加SAP Business Application Studio。注意:在选购BTP免费环境的时候,使用人要选公司才可以成功。在完成上述操作后,就可以登陆Cockpit。这里有SAP官方的BTP试用的手顺链接。配置权限※我绑定的是登录时的邮箱。※过程中有问题可以在评论区讨论。

wangshulong2013的博客 723

MWORKS 2025a电气模型库实战:手把手教你搭建全桥LLC电路(附避坑指南)

本文详细介绍了如何使用MWORKS 2025a电气模型库搭建全桥LLC电路,包括环境准备、电路拓扑构建、参数优化及故障诊断。通过实战案例和避坑指南,帮助电源工程师高效设计谐振转换器,提升转换效率至98%以上。文章特别强调了Modelica模型库在电气系统建模中的关键作用。

s8t9u0v1w的博客 603

E - Eustia of the Tarnished Wings

Sample Input 4 1 2 1 3 10 Sample Output  2 Source::Click here  题解 将所给的n个领导人的属性值进行排序(从小到大)。利用栈的特点来做这道题。首先将最小的压入栈,然后对后n-1个数据进行遍历,如果当属性值与栈顶属性值差的绝对值小于等于m,则将栈顶元素弹出,当前元素压入栈中,即将其合并;否则&gt;m,直接将当前元素压...

Alibaba_lhl的博客 338

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 383

牛客国庆集训派对Day1 E Eustia of the Tarnished Wings(排序)

https://www.nowcoder.com/acm/contest/201/E   排个序   #include&lt;iostream&gt; #include&lt;algorithm&gt; #include&lt;cstring&gt; #include&lt;cstdio&gt; using namespace std; #define LL long long int ...

三水的鱼塘♂ 245

YOLOv8n模型导出ONNX的避坑指南:解决版本差异,正确生成TensorRT/RKNN所需输出节点

本文详细介绍了YOLOv8n模型导出ONNX格式的实战避坑指南,涵盖版本差异处理、代码修改技巧及TensorRT/RKNN部署优化方案。针对不同推理框架需求,提供输出节点生成、动态轴处理和后处理划分等核心问题的解决方案,帮助开发者高效完成模型部署。

weixin_33247358的博客 357

AUTOSAR进阶图解==>AUTOSAR_SWS_CANStateManager

AUTOSAR CAN状态管理器(CanSM)摘要 CanSM是AUTOSAR通信栈中的关键模块,负责管理CAN网络状态和模式转换。主要功能包括: 控制CAN控制器/收发器工作模式(STARTED/STOPPED,NORMAL/STANDBY) 处理三种网络状态(全通信、静默通信、无通信)之间的转换 监控和处理总线关闭(Bus-Off)事件 与ComM、CanIf、BswM等模块协同工作 CanSM通过状态机管理网络状态转换,支持可配置的总线关闭恢复策略。它为每个CAN网络维护独立的状态机,实现网络状态的精

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 5579

刷题记录[导航贴]

最近记录的最后一道题:Codeforces Round 929 (Div. 3) D. Turtle Tenacity: Continual Mods(数学,贪心)

2302_79440616的博客 1469

R语言中的summarise函数和mutate函数用于计算分组占比。下面是关于这两个函数的详细介绍以及相应的源代码示例:

R语言中的summarise函数和mutate函数用于计算分组占比。

CodeByte的博客 1183

牛客算法竞赛入门课第一节习题 2022.10.3

01串,即通过二进制位表示当前要选择的行或者列的状态。这样可以等价于进行深度优先搜索的返回结果,但是相较于深度优先搜索写法更加简单,同时对于状态记录更加容易去除一些重复记录的值。对于行或者列,先进行行选取,选择某些行的权值求和,之后再对列进行选取,记录相应的状态并求和。之后对于求和记录最大值。每次对数组中的数据进行操作后,之后都要记得恢复。

Ls_attack的博客 1152

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...

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

牛客-模拟、枚举与贪心 2022.10.19

递推 用res[i]表示iloveyou匹配了前i个的字符的子序列数,当遇到第i个字符,则之前匹配了前i-1个的字符的子序列都可以变为匹配了前i个的字符的子序列,即res[i]=res[i]+res[i-1]递推+高精度(所以python)

Ls_attack的博客 565

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

牛客-模拟、枚举与贪心 2022.11.16

分成三类,稳定值增加,不变,减少。考虑从后往前遍历减少的情况,可以发现最后一个要符号条件,需要当前值大于消耗值,而恢复值是不需要看的,因为消耗完就结束了,所以恢复值不是那么重要。看到异或操作其实第一反应就是将数据改写成二进制形式,之后再观察样例的输出结果,可以发现如果当前二进制位零的个数超过了数据个数的一半,就讲结果这一位二进制写为零,否则写为一(因为需要多组可行解的情况下,数值尽可能小)(零的个数正好为一半时可以为零,也可以为一,但是为了数值尽可能小,所以选择为零)但是直接遍历只能过60%,还需要优化。

Ls_attack的博客 469

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

牛客-模拟、枚举、贪心 2022.11.15

之后对于每个名字的查询,从名字的第一个字母出现的第一个位置开始,二分查找之后每个字母的位置是否大于当前的位置,如果大于,更新当前位置,直至名字数组结束,说明存在子序列,否则不存在。如果二者最高位相同,则比较下一位,直到出现不同的二进制位置,那么从这一位置开始往后到二进制的最低位,存在全为一的最大值,之前的高位置都相同,异或结果为0。对于药剂的数值,按照从大到小排序,对于奶牛的区间,按照区间最小值从大到小排序,之后遍历奶牛,对于每头奶牛,遍历药剂看是否存在符合条件的药剂,记录结果即可。模拟遍历01串即可。

Ls_attack的博客 392

牛客-栈、队列和stl 2022.10.12

一开始的想法是寻找从n开始到1的序列,但是只能过7.51%,题解区的做法是:贪心思想,记录一个后缀的最大值数组,每次将数组元素入栈,然后比较栈顶元素和当前最大值,如果栈顶元素大于当前最大值,则出栈,直到小于为止。(还是没想明白为何一开始做法不对,明后几天继续想想)昨天面试和笔试有点多,没时间刷了,写了两道水题感觉没必要记录,所以没有写。今天面了两家,笔了三家,抽空写了这么一道可以记录的题。

Ls_attack的博客 383

牛客-函数与递归 2022.10.10

其实就是简单的根据字符串序列,每次使用前半段构建左子树,后半段构建右子树,当前字符串判定是I,B,F串然后按照后序遍历的顺序输出。每次截取可以使用开始下标和结束下标进行标记,在这个范围内判断字符串输出什么即可。

Ls_attack的博客 352

牛客算法竞赛入门课第一节习题 2022.10.1

先求取一个前缀和数组,通过前缀和数组求取各个k个数序列的大小。之后先从前往后更新记录k个数序列的最大值,再从后往前更新记录k个数序列的最小值,最后从前往后或者从后往前遍历一次所有序列,对每次能取到的最大值求和,更新,得到最后的结果。通过每次对当前数值n的大小进行更新,从而能够逐步缩小范围从而规避第三种情况。对输入数字进行分解质因数。

Ls_attack的博客 343

牛客-模拟、枚举与贪心 2022.10.20

可以看到,当将第一行的答案放在第一列的时候,剩下的就是求的答题卡规模为(n - 1) * (n - 1) 的所有方案,当第一行的答案放在第二列的时候,剩下的就是求答题卡规模为(n - 2) * (n - 2) 的所有方案(因为此时根据答案横竖相同要求的对称性,确定了一行的同时也就确定了一列,所以此时有两行和两列都不能进行选择),同理将第一行的答案放在第三列也是一样的。所以横答题卡某一行的答案确定之后,对应的竖答题卡的某一列的答案也就确定了,并且交于这两个答案的行和列也已经确定了。在棋盘规模为 的情况下,

Ls_attack的博客 339

牛客-语法入门-循环结构程序设计 2022.10.5

负数进制转换规则:如果余数mod为负数,余数mod减去除数base进制基数,之后数字n减去余数mod再除以进制基数base,循环往复即可。记录上下限求取差值,还需要前缀和进行差值累加。

Ls_attack的博客 302

牛客算法竞赛入门课第一节习题 2020.10.2

由于坐标的范围是固定的,所以可以根据固定的坐标范围进行二维前缀和求取在边长R的范围内,能够取到的价值最大值。贪心思想,按照结尾排序,每趟记录开始点和结束点,每趟将已切分开的序列进行标记。在序列的头和尾结点切分不能算切分,不能算。贪心思想,按照结束时间排序,然后统计个数即可。

Ls_attack的博客 294

牛客-语法入门-顺序结构程序设计 2022.10.4

赛瓦维斯特定理:a,b > 1 gcd(a, b) == 1 使得ax + by = c的最大无整数解C的取值为 a * b - a - b。数学题,比较繁琐的是误差和精度。

Ls_attack的博客 291

牛客-模拟、枚举、贪心 2022.11.18

从样例可以发现,首先可以假设所有的奶牛都为最高值,然后对于每一对给出的奶牛的区间,在这区间之间编号的奶牛需要高度减去一(区间为左开右开)。经过一番操作之后,即可得到所有奶牛可能的最高值。(当然可能重复出现的区间,对于重复出现的区间不需要进行重复操作即可)从高位到低位依次枚举,优先考虑从0变为1,就是说尽可能的让这个数小一点。可以考虑最开始每一位为 0/1,然后到最后是否可以变回 1。贪心排序花和道路所需时间即可。

Ls_attack的博客 286

牛客-模拟、枚举与贪心 2022.10.31

当我们希望对原数组的某一个区间[l,r]施加一个增量inc时,差分数组d对应的变化是:d[l]增加inc,d[r+1]减少inc,并且这种操作是可以叠加的。这道题目中,每次增量的数目为1。之后对于每个位置的不同货物的种数,进行一个前缀和,即可得到每个位置的不同货物的数目。当我们需要对原数组的不同区间施加不同的增量,我们只要按规则修改差分数组即可。(新学了差分数组这一数据结构,初次接触,之后好好复习)

Ls_attack的博客 264
上一篇: 牛客-模拟、枚举与贪心 2022.10.22
下一篇: 牛客-模拟、枚举与贪心 2022.10.24
Ls_attack
博客等级 码龄10年 25粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值