Educational Codeforces Round 37 (Rated for Div. 2) D.Tank(思维题-dp/背包+乱搞)

美团笔试题--蓄水池蓄水量问题 “看下面这个图片” “在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]” “假如开始下雨了,那么墙之间的水坑能够装多少水呢?” “以1×1的方块为单位计算容积。所以,在上边的图中下标为1以左的都会漏掉。下标7以右的也会漏掉。剩下的只有在1和6之间的一坑水,容积是1 阅读详情

题目

你有n(2<=n<=5e3)个水池,初始第i个池子有ai(0<=ai<=1e5)的水且容积无限大。

一个容积为k(1<=k<=5e3)的勺子,可以装一个水池的min(k,a[i])的水放到其他水池。

勺子不能同时从两个水池里取水,从一个水池里取了之后必须立刻倒掉,且只能倒在一个水池里。

求能否配出V(0<=V<=1e9)容积的水,

要求输出方案,第j行输出三个数cnt x y,表示从x水池取水,倒向y水池,且取了cnt(1<=cnt<=1e9)勺

要求输出的行数不超过n+5

思路来源

https://blog.youkuaiyun.com/afd5154/article/details/102254040

https://blog.youkuaiyun.com/tomjobs/article/details/104241859

题解

首先,如果可以不限次数的话,

一个水池用来存答案,剩下留一个水池存废水,其他要么倒向答案池要么倒向废水池

水的体积sum<v显然不行,每个池子的余量ai%k背包凑不出v%k也显然不行,

否则一定可以,先用若干个池子的余量凑出v%k,这些池子中取一个当答案池,

由于sum>=v,整数v/k的部分用废水池的水显然能凑足,如果已经多了就反向倒出就行了

然后回来考虑这个n+5的次数,发现倒向答案池和废水池最多n次,即完成背包,

最后差k的整数倍,这个操作只用一次就可以解决了,所以n+5次数限制没用

 

思路来源的两个写法,都判断了哪些池是为了凑齐背包一定必需的

但我感觉没必要判,搞出一种背包方案就可以了,反正次数够用

代码

#include<bits/stdc++.h>
using namespace std;
const int N=5e3+10;
int n,k,v,a[N],sum;
bool dp[N][N];
vector<int>e[2];
bool ok(){
    if(sum<v)return 0;
    dp[0][0]=1;
    for(int i=1;i<=n;++i){
        for(int j=0;j<k;++j){
            dp[i][j]|=dp[i-1][((j-a[i])%k+k)%k];
            dp[i][j]|=dp[i-1][j];
        }
    }
    if(!dp[n][v%k])return 0;
    int now=v%k;
    //找到一组方案 使得e[0]内的数之和x%k 和v%k 同余
    for(int i=n;i>=1;--i){
        if(dp[i-1][((now-a[i])%k+k)%k]){
            e[0].push_back(i);
            now=((now-a[i])%k+k)%k;
        }
        else{
            e[1].push_back(i);
        }
    }
    return 1;
}
int main(){
    memset(dp,0,sizeof dp);
    scanf("%d%d%d",&n,&k,&v);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
        sum+=a[i];
    }
    if(!ok())puts("NO");
    else{
        puts("YES");
        int now=0;
        for(int i=0;i<e[0].size();++i){
            now+=a[e[0][i]];
        }
        for(int i=1;i<e[0].size();++i){
            printf("%d %d %d\n",100000,e[0][i],e[0][0]);//e[0][i]->e[0][0]
        }
        for(int i=1;i<e[1].size();++i){
            printf("%d %d %d\n",100000,e[1][i],e[1][0]);//e[0][i]->e[0][0]
        }
        if(!e[0].size())e[0].push_back((e[1].back()));//除v%k==0情况外 不可能出现!e[0].size()的情形 但v%k==0时0<v 也需要凑齐体积为v的水 找到一个空水箱存储答案
        if(!e[1].size())e[1].push_back((e[0].back()));//所有水箱都用上了 那随便找个放多余水的空水箱
        if(now<v)printf("%d %d %d\n",(v-now)/k,e[1][0],e[0][0]);
        if(now>v)printf("%d %d %d\n",(now-v)/k,e[0][0],e[1][0]);
    }
    return 0;
}

 

MATLAB项目,模拟曲柄滑块机构的运动学和动力学.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

基于MATLAB的Abel反演和Fowler–Milne诊断研究对HyperFill TWGMAW-P进行了电波形分析。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Educational Codeforces Round 61 (Rated for Div. 2) E. Knapsack 背包

一道很神奇的背包题。 题目链接:http://codeforces.com/contest/1132/problem/E 题意: 给你一个背包上限w和数字1-8的个数,注意w<=1e18,num[i]<=1e16。 似乎是一个巨大的背包,让我真的是,有点摸不到头脑啊。。想了一段时间也确实没想到,知道肯定是个背包就对了。。 做法: ...

人生如戏 327

增强型PID-自适应-前馈-神经网络控制研究(Matlab代码实现)

内容概要:本文系统研究了“增强型PID-自适应-前馈-神经网络控制”复合控制策略,结合Matlab代码与Simulink仿真模型,深入探讨了传统PID控制与智能控制算法的深度融合方法。该策略通过引入自适应机制和前馈补偿,结合BP神经网络进行非线性系统建模与参数优化,并融合扩展卡尔曼滤波(EKF)等状态估计技术,提升控制系统在复杂动态环境下的响应速度、鲁棒性和控制精度。研究涵盖双闭环控制架构设计、神经网络训练流程、EKF状态融合等关键技术环节,适用于电机控制、电力电子变换器、无人机、微电网等高阶非线性系统的建模与仿真。配套资源丰富,包含多个可复现的Simulink模型、Matlab代码及参考文献,尤其支持高水平EI期刊成果的复现与验证。; 适合人群:具备自动控制理论基础和Matlab/Simulink仿真能力,从事控制工程、电气自动化、电力电子或智能系统研发的研究生、科研人员及工作1-3年以上的工程技术人员; 使用场景及目标:①深入研究先进PID控制策略在非线性系统中的优化应用;②实现神经网络与经典控制算法的协同设计与联合仿真;③开展状态估计、参数辨识与智能控制策略的实验验证;④复现并拓展高水平学术论文中的控制方法,支撑科研创新与项目开发; 阅读建议:建议结合提供的Matlab代码与Simulink仿真模型进行实践操作,重点剖析控制结构设计逻辑、神经网络训练过程及EKF状态估计的实现细节,按照文档说明逐步调试与优化,以全面掌握复合控制系统的建模、仿真与性能评估方法。

2018 Benelux Algorithm Programming Contest (BAPC 18) G-Game Night(滚动)

题意 给一个只含ABC的字符串, 要求把字符串的A放在一起B放在一起C放在一起, 问最少有多少个字母需要被移动位置。 思路来源 翼神 题解 就是一波暴力啊,和秦皇岛那个字符串暴力题很像。 全排列ABC、ACB、BCA、BAC、CAB、CBA六种, 考虑是圆串,所以可简化为ABC、ACB两种, 预处理两个串,然后与原串暴力匹配即可, 原串也是圆串,所以将其重复一遍展成线...

小衣同学的博客 1316

【Qualcomm高通音频】如何封装音频控件?

音频代码涉及面很广,这篇文档介绍如何封装音频控件给HAL层使用。这里以AW87519芯片调试为例进行介绍封装音频控件和使用的方法。在最初接出到高通音频基础功能调试的时候,都是从tinyalsa指令/mixer_paths文件配置开始。因为单独一个音频设备的调试,都对应一条音频链路的打通。比如以下链接上高通平台基础音频输入输出设备调试: 【Qualcomm音频】Speaker 调试记录http...

crow_ch的博客 1954

300m半径无人机单兵侦测设备技术详解

300m半径无人机单兵侦测设备凭借其卓越的侦测性能、高效的识别能力、便捷的告警方式以及广泛的应用场景,成为现代军事、安保及应急救援领域的重要装备。300m半径无人机单兵侦测设备,融合了最新的无人机技术、高精度传感技术与实时数据处理技术,为单兵作战、巡逻及侦察任务提供了前所未有的视野与效率。该设备通过无人机搭载的高性能侦测模块,能够在复杂环境中实现300米范围内的精准侦测,大幅提升单兵的战场感知能力和决策效率。设备为被动式探测设备,确保安静安全运行,不暴露目标 设备耗电功率小,可长时间在野外使用。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1118

Codeforces Round 948 (Div. 2) E. Tensor(思维题-交互)

(6)否则,记las的两个父亲为f1、f2(也就是上图的点6、点7),如果能往f1后面续,就往f1后面续,否则往f2后面续。新来的点3,可以接在点4后,也可以接在点5后,也可以接在点6后,也可以接在点7后,因为在链中间的点后面续新的点,都可以看成是在交点后面续新的点,不影响两条链的性质。而此时应该是10->9->6->3->2,另一条链8->7->5->4->1。而这种情况的出现,说明前面有一个只询问了1次的点,也就是在点5下面的点4,可以发现,在点5形成Y字型,后接点4之后,新来的点3并没有续到点4上,

小衣同学的博客 1224

power bi 演唱会-佐罗

我是业务分析人员,注重使用性,因此,课程不到 30% 的内容就可以解决目前为止我碰到的所有业务问题,剩下的 70% 内容是帮助我提升,优化,升华,精益求精用的,比如第三方工具,比如代码运行速度优化,比如查询逻辑优化等等。系统性上来说,结构明晰,安排上非常有条理,层层递进;《BI 真经》,中有真经二字,略显夸大,而当我第一次证明了这点的时候,我也非常惊讶,这就是我做以下所有事情的一切动力。《BI 真经》综合考量思想性,系统性,本质性,创新性,通用性,技巧性,启发性,对比其他课程有压倒性的显著优势。

v_1090213742的博客 911

AtCoder Beginner Contest 278 G.Generalized Subtraction Game(思维题/博弈 multi-sg)

AtCoder Beginner Contest 278 G.Generalized Subtraction Game(思维题/博弈 multi-sg)

小衣同学的博客 1171

告别OFDM卡顿:用MATLAB手把手仿真AFDM波形,搞定高铁、无人机通信的时变信道难题

本文详细介绍了如何使用MATLAB仿真AFDM波形,解决高铁和无人机通信中的时变信道难题。通过仿射变换技术,AFDM在多普勒频移严重的场景下表现优异,显著提升通信质量。文章包含参数配置、波形生成、性能对比等实战内容,适合通信工程师和研究人员参考。

weixin_27014595的博客 318

对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理:

故障诊断,对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理

qq_44757503的博客 6058

Codeforces Round 975 (Div. 1) D. Max Plus Min Plus Size(思维题 并查集/动态dp 线段树维护状态合并)

f[x][i][j][k]表示线段树的x节点,最大值有没有取到,左端点有没有选,右端点有没有选,如果最大值被包含在1 3 5里显然取1 3 5,否则换成2 4一定能取到最大值,是不劣的,对于最小值固定的话,对于1 2 3 4 5的连续段,要么贪心地取1 3 5,要么取2 4。如果存在一个连续段,使得选这个连续段中较多的那一半(奇数唯一,偶数均可)能取到最大值。则答案不需要减1,否则为了取到最大值需要反选,将答案减1。hhoppitree代码 + 官方题解。注意到最大值一定会被取到,

小衣同学的博客 1126

基于树莓派5的AR头显开发:从硬件选型到Unity整合全解析

增强现实(AR)技术通过将虚拟信息叠加到真实世界,为用户提供沉浸式交互体验。其核心原理依赖于计算机视觉进行环境感知与空间定位,并结合实时3D渲染实现虚实融合。在工程实践中,嵌入式平台因其低成本、低功耗特性,成为探索AR应用边界的重要载体。本项目以树莓派5为核心,通过集成OpenCV进行ArUco标记识别实现精准空间定位,并利用MediaPipe完成手势交互,最终在Unity引擎中完成虚实场景的实时渲染与融合,为开发者提供了一个完整的、可亲手实践的AR系统开发方案。

weixin_32430941的博客 254

The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

维护两个vector L、R,代表下一步要在[l,mid]和[mid+1,r]分治的vector。这样del里的元素,在并查集上找到其祖先时,可以用to数组确定其应该被放进L还是R。每次将x random_shuffle后,取出vector尾部的两个u、v,和已经被询问出来的元素再一起询问一次,就能确定出这个元素该放进L还是R。分治,假设当前解决到[l,r],要递归的vector是x,期望次数是6000的,实际跑得飞快,也没被卡掉。只剩一个元素时,L或R一定已经有元素,首先特判n=1的情况,其实也不用问。

小衣同学的博客 1064

解决Windows 11文件右键菜单卡死问题的方法

当你右键点击一个文件或者文件夹时,系统会加载与该文件类型相关的上下文菜单项,如果其中某个菜单项的代码执行时间过长或者出现错误,就会导致整个右键菜单卡死。综上所述,当你在Windows 11中遇到右键菜单卡死的问题时,你可以尝试禁用上下文菜单项、重置文件关联、排除第三方软件干扰、修复系统文件以及优化代码等方法来解决问题。如果你是一个开发者,并且你自己编写了一个上下文菜单项,那么问题可能出在你的代码中。例如,如果你遇到了图片文件的右键菜单卡死问题,你可以找到".jpg"或".png"等相关的子项。

HnrzLinux的博客 7536

SpringBoot如何正确连接SqlServer(亲测可用)

对于SpringBoot连接SqlServer的方式和常见的错误的汇总。1、驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。2、com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 ‘DUAL‘ 无效。

黄团团的个人博客 2万+

Codeforces Round 973 (Div. 2) F1. Game in Tree (Easy Version)(思维题 博弈)

如果能走旁边的链(也就是当前点,刨去标记链以外的子树中最长的链),使得对面走剩余的连通块无法比你大,就走旁边的链,并宣告获胜。维护实际是一个区间最值,可以用set或者st表。两个人的策略是一样的,把1到u的路径标记,否则沿着标记链,朝对面的方向走一步。

小衣同学的博客 1040

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 Round 803 (Div. 2) E. PermutationForces II(思维题 位置序列)

类似地,posb[6]和posb[7]都可以用到[1,7]里的可用位置,分别对应ans*=2和ans*=1。posb[3]可以用到[1,7]里的可用位置,即[1 4 2 6 7 3 5]里的[4 7 3 5],posb[1]只能用到[1,5]里的可用位置,即[1 4 2 6 7]里的[4 7],ans*=2。所以,合法的条件是,对于b[i]不为-1的位置,要求a[i]的值不能超过b[i]+s。比如,在为posb[1]=-1这个未确定的位置赋值的时候,posb[1]的值,

小衣同学的博客 1034

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Gym - 101291L Three Square(模拟)

题意 给你三个矩形,问是否能拼成一个正方形 题解 首先,面积和得是一个完全平方数q(不是就说明不能),记q=r*r 把边长为r的那个矩形挑出来(不存在就说明不能),然后把剩下两个暴力合并 合并之后,再把合并出来的和挑出来的暴力合并, 如果能合并成一个正方形就能,否则就不能…… 心得 这种没什么算法没什么套路的题最讨厌了…… 之前一直wa在12,CF的gym也看不了样例,很迷…...

小衣同学的博客 998

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

蓝桥杯周赛 第 1 场 强者挑战赛 6. 小球碰撞【算法赛】(思维题/最长上升子序列LIS)

二分时间t,第i个小球对应一个起点pi、终点pi+t*vi的区间,问题转化为,选最多的区间,使得不存在区间包含(即li<lj<rj<ri)的情况,排完序后,考虑右端点的LIS,如果>=n-k,即合法,否则不合法。如果可以选这样的区间>=n-k个,则t是合法的时间。由于左端点均不同,所以先按左端点排序,

小衣同学的博客 995

华中农业大学2023年十二届程序设计竞赛(同步赛)G. 简单的开关(思维 括号匹配+差分+前缀和 set/珂朵莉树)

表示将第l个(含l)到第r个(含r)开关的状态设置为开或者关(k=0表示关、k=1表示开)设出现次数为x,则C(x,2)就能找到两个合法端点L-1和R,确定题目所求区间[L,R]2. assign将[l,r]内的每个区间删掉,合并为同一个[l,r],赋值为k。1. split将包含x的区间[l,r)拆成两个区间[l,x)和[x,r)每一段区间[l,r),记录区间开始的前缀和值和区间终止时的前缀和值,可以把1看成(,遇到(就+1,把0看成是),遇到)就-1,后面的逻辑相同,前面的区间覆盖用珂朵莉树维护。

小衣同学的博客 982

Codeforces Round 901 (Div. 1) B. Jellyfish and Math(思维题/bfs)

所以,如果相同的(x>>i&1,y>>i&1,w>>&1)对应的(c>>i&1,d>>i&1)不同时,直接无解。t(t

小衣同学的博客 964

Toyota Programming Contest 2024#1(AtCoder Beginner Contest 337)F. Usual Color Ball Problems(思维题 双指针)

长为n(n<=2e5)的球序列,第i个球颜色ci,有m(m<=n)个空盒子,编号1-m。首先执行r次,意味着,循环询问,对于每个开头的长为n的序列都询问一次,所以序列扩成二倍。记颜色w的球在盒子里的球为now[w]个,则占了now[w]/k(向上取整)个盒子。位置在p位置之后,但因为和p位置之前放入盒子里的球同色,而能被继续放入的球,一旦确定了不在盒子内的球的位置p,前面在盒子里的同色的球的个数也能确定,然后考虑双指针,双指针维护第一个不在盒子内的球的位置,注意到它是单增的。

小衣同学的博客 826

Codeforces Round #833 (Div. 2) D. ConstructOR(构造 逆元/exgcd)

Codeforces Round #833 (Div. 2) D. ConstructOR(构造 逆元/exgcd)

小衣同学的博客 825

Toyota Programming Contest 2024#4(AtCoder Beginner Contest 348)F. Oddly Similar(bitset暴力)

n(n

小衣同学的博客 807

Codeforces Round 951 (Div. 2) F. Kostyanych‘s Theorem(思维题 交互好题)

而一直问n-1显然肯定不行,这样会导致剩下的删边越来越多,最后剩下一堆小于n-2的。还会输出一个和这个点v当前没有连边的点x,如果x有多个,也输出点号最小的x。2. 如果问出来的是n-1,n-1可以和子图内的点任意连,插入到任何地方,1. 如果问出来的是n-2,显然删掉这个点的子图还满足这个条件,递归子图。交互题,n(n

小衣同学的博客 796
上一篇: 洛谷P4161 [SCOI2009]游戏(思维题-循环节+质数+完全背包)
下一篇: Codeforces Beta Round #11 D. A Simple Task(状压dp/无向图简单环的个数)
小衣同学
博客等级 码龄9年 1444粉丝 995原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小衣同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值