“华为杯”山东理工大学第十届ACM程序设计竞赛 - 解题报告

出题组:

  • bLue
  • 豪子
  • MLE_kenan
  • xXx
  • axuhongbo
  • suyu
  • MeiK
  • sdk2


由于服务器崩溃和数据范围错误给参赛选手带来的问题,出题组在此向大家道歉。


文章目录

  • @[toc]
  • [4231] F - 几何递推
  • [4246] A - 三角形
  • [4239] B - Guns and Roses (1)
  • [4242] C - SDUT集训队夏季选拔
  • [4232] D - acm
  • [4229] E - 剪子-包袱-锤
  • [4249] G - 流量那些事儿
  • [4241] H - menhera酱那惨不忍睹的数学
  • [4248] I - 集训队的纪念品
  • [4247] J - Alice and Bob

#热身赛

##[4244] A - 死亡的 cyk
@(by MeiK)

此题是特判题,本意是概率AC,即这一次提交与下一次提交后台的正确输出数据是不同的,比赛时由于服务器问题导致空代码也可过。

##[4245] B - 郭鑫的难题(一)
@(by axuhongbo)

签到题,求出最大最小值相减即可

参考代码

##[4243] C - cyk的小学数学题
@(by sdk2)

模拟即可

参考代码

##[4233] D - 连续序列
@(by suyu)

贪心或dp

参考代码

##[4230] E - 圆
@(by suyu)

此题需要一定的几何基础。

参考代码

[4231] F - 几何递推

@(by suyu)

因为情况少,可以尝试手动画出来。也可以通过递推解决。

参考代码


#正式赛

[4246] A - 三角形

@(by suyu)

签到题

参考代码

[4239] B - Guns and Roses (1)

@(by axuhongbo)

基础博弈:解释下样例123 8,首先用123去除9,得到商为13余数为6. 于是我们可以先报6然后让此后每一轮的大家报数的和为9. 这样可以保证最后一轮中对方无论报什么数都无法让总数到达123,因为到了最后一轮时,若用123去减此前所有报数之和肯定为9.这时,对方无论报1到8任何一个数都无法取得胜利,我们只需要报最后一个与其相加为9的数即可获得胜利。
推广与延伸
此类问题,可用以下公式解决 【 总数 除以(可报数最大值+可报数最小值)】 所得的余数即为第一次报的数,以后每次报与对方数相加为【可报数最大值与最小值之和】的数。若无余数则无法保证胜利。

参考代码

[4242] C - SDUT集训队夏季选拔

@(by axuhongbo)

题目大意是,n个人,每个人有三个成绩等级值a,b,c,求出 不存在 有人的所有的成绩等级都比其高的人 的个数。当然,这里的题目设定有些不同,成绩等级越小代表成绩等级越高。
这里我们利用线段树,将人按照成绩等级从小到大(也就是从高到低)排序,边查询(1,num[i].b)区间成绩等级c的最小值,边更新(1,num[i].b)区间成绩等级c的最小值。
由于是边查询边更新,保证了得到的区间是满足成绩等级a和成绩等级b都小于(高于)当前成绩等级的a,b的,只要保证这个区间中的最小成绩等级c大于(低于)当前成绩等级c,那么当前此人满足要求。
当然cdq分治也是可做的,有掌握该算法的同学可以自行尝试。

参考代码

[4232] D - acm

@(by suyu)

签到题,比赛时有一部分选手是因为题目数据范围给出的不对而wa,赛后已更正数据全部重判。

参考代码

[4229] E - 剪子-包袱-锤

@(by axuhongbo 改编)

首先需要注意的是机器人的策略,这个策略是很符合逻辑的,首先统计对手已经出过的剪刀石头布的次数,然后如果对方出哪个比较多,然后他会猜测对手下次也会继续出对方出的比较多的那个,那么机器人下次肯定会出能克制对手的招式,只有当对手出过的剪子包袱锤的次数最多的招式不止一个时,才用到优先级判断。
接下来就大体可以分为两种做法,如果你手动推算两三种招式的话,就会发现,广泛的来看,六种情况(三种招式的大小情况一共有6种)下你要想全胜的做法都是以6为循环节的(即使有一些小于6),接着你推出所有6种情况,判断输出即可。
另一种做法就是完全按照题意模拟即可。

参考代码-做法1
参考代码-做法2
##[4235] F - 关灯计划
@(by bLue)

同时遍历两个字符数组,如果存在某个位置,在第一个数组上是 .,第二个数组上是是 @,则标记为无法达成;若在第一个数组上是 @,而第二个数组上是 .,则记为要关灯的房间。最后根据情况输出即可。

参考代码

[4249] G - 流量那些事儿

@(by bLue)

按题意模拟即可。应注意流量使用 long long 计算,流量包过期和有效期顺延等情况都要考虑到。

参考代码

[4241] H - menhera酱那惨不忍睹的数学

@(by 豪子)

(此题用到最大流算法或二分图,还没学习过的建议以后再看)

因为每个式子出现的答案只能出现一次,我们可以联想到网络流模型。关键是如何建模呢?
如果我们把每个式子看成一个点,每个式子的加、减、乘、除所计算的结果看成一个点,然后两者对应连边,
所有的式子跟源点s相连,所有结果跟汇点相连,所有边的流量都是1。那么跑一次最大流,如果最大流是n说明,
每个式子都能找到一个互不相同的答案,表示有解,否则,无解。输出答案二分图只要记录好路径就可以了,最大流就是去找出发点为式子并且流量为0的边(这里不做详细解释)。
模型:

参考代码-网络流版
参考代码-二分图匹配版

[4248] I - 集训队的纪念品

@(by bLue)

贪心,将物品和人所拥有的钱排序,然后暴力枚举或二分查找。

参考代码1
参考代码2

[4247] J - Alice and Bob

@(by MLE_kenan)

浮点数背包,假设所有数都是整数,设背包的容量为n,dp[i]就为恰好能凑出钱数为i的方案数,首先我们先推出状态转移方程:

dp[j]=dp[j]+dp[j-a[i]]

含义为我们可以通过凑出钱数为j-a[i]的方案数来递推出钱数为j的方案数,枚举背包容量,因为钱币是无限张的,所以背包容量是从小到大枚举的。

初始化的dp数组为:

接下来只需解决浮点数问题,因为钱币的数据范围最多为一位小数,我们可以直接对钱币的价值和switch的价值乘上10,将浮点数转化为整数。值得注意的是,n不一定少于两位小数,但是n小数位数超过一位的时候,你无论怎么凑都是凑不出n,这个时候直接特判掉即可。

这个题有坑点,就是小数位数很多,用double会导致精度问题而Wrong answer,所以需要采用字符串读入,并且还要注意n还可能是个整数(实数包括整数)

参考代码

如果上述代码链接失效,请到以下链接下载
这是一个链接

“华为杯”山东理工大学第十届ACM程序设计竞赛 - 解题报告相关推荐

  1. 山东理工大学第十二届ACM程序设计竞赛 - Cut the tree(树上启发式合并+线段树)

    题目链接:点击查看 题目大意:给一个具有 N 个节点的有根树,以 1 号节点为根,节点编号从 1 开始,点有点权.树的第 H 层权值为深度为 H 的所有点的点权之和.树的总权值为所有层权值的最大值.问 ...

  2. “华为杯”大连理工大学第15届大学生程序设计大赛(验题人题解)

    M:A+B 临时加的签签到到题 L:数学 代进去求一下,签到题 #include<bits/stdc++.h> using namespace std; typedef long long ...

  3. 2019年山东省第十届ACM程序设计竞赛 比赛总结

    首先恭喜自己获得了acm生涯中第一块,也是最后一块省赛的奖牌. -------------------------------------------------------------------- ...

  4. 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛B(减成1)

    科林明伦杯"哈尔滨理工大学第十届程序设计竞赛 存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多少次操作,可以让所有数都变成1. 数据保证一定有解. 输入描述: 输入t, ...

  5. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解

    "科林明伦杯"哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解 萌新又来写题解啦 原题链接 B 减成一 题意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多 ...

  6. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛 E 赛马 python

    "科林明伦杯"哈尔滨理工大学第十届程序设计竞赛 E 赛马 python E 好家伙 田忌赛马真就 匹配就不解释了 思路,主要咱不止一匹马 所以就最好的比 对方比这个数小的即可 所以 ...

  7. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (部分题解)

    "亚信科技杯"南邮第七届大学生程序设计竞赛之网络预赛 比赛链接http://acm.njupt.edu.cn/acmhome/contest.do?&method=cont ...

  8. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (K L题解)

    "亚信科技杯"南邮第七届大学生程序设计竞赛之网络预赛 (K L题解) 第一次出题,果然背锅了,L题由于数据问题,让两种不对的方法ac了,分别是:H<0时取前一天送上花(应该是 ...

  9. 第二十届宁波大学程序设计竞赛(同步赛)

    A-0-1翻转_第二十届宁波大学程序设计竞赛(同步赛) (nowcoder.com) 思路: 我们观察发现,奇数位与偶数位的1每次操作一定时同时增加或者减少的,我们无法做到同时删除奇数位的两个1..不 ...

  10. “华为杯”山东理工大学第十一届ACM程序设计竞赛(正式赛)

    猜先 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 小 A 和小 B 最近开始学习下 ...

最新文章

  1. scipy csr_matrix csc_matrix
  2. G - Shuffle‘m Up POJ - 3087
  3. mysql的一个bug Block Nested Loop
  4. leetcode 877. Stone Game | 877. 石子游戏(递归/动态规划/数学解法)
  5. android配置so支持armeabi,安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)...
  6. 【Vue2.0】—Vue监视数据的原理(五)
  7. 滴滴“负重”387天
  8. opencv 图像基本操作 像素值的获取、图像大小、ROI、通道分割与合并等
  9. java boolean 大小_Java 中 boolean 类型占用多少个字节 [MD]
  10. QT基本操作(简易教程)
  11. su灯光插件_V-Ray for SketchUp渲染外部照明快速入门
  12. 设置程序在Windows开机后自动运行的方式
  13. 计算机应用发展史的第四代,1.1.1 计算机的概念及其发展史
  14. Python识别图形验证码
  15. 2021年要毕业了,有必要考研吗?工作经验重要还是学历重要 ?
  16. sunyueonline.com最新SEO成果显著,百度百科收录“孙越”
  17. navicat与mysql
  18. 主动学习(Active Learning)简介综述汇总以及主流技术方案
  19. c语言程序中*p代表什么,C语言声明指针的时候int*p到底是什么意思? 爱问知识人...
  20. Flutter 跨平台框架应用实战-2019极光开发者大会

热门文章

  1. Echert 缩放后切换再数据,缩放大小没还原的解决办法
  2. 两种方法删除顽固的DLL文件。
  3. 驻马店计算机招聘信息网,2017河南职称计算机考试报名:驻马店职称计算机报名入口...
  4. 微型四旋翼飞行器的设计与制作
  5. flash对联广告代码: 两边显示 不移动 可关闭
  6. SharePoint 2019 预览版下载地址(中文)
  7. 关闭Ubuntu错误报告
  8. python 图片外围置零 np.pad操作
  9. ChromiumOS的分区格式
  10. mysql 明文密码_后台能看到明文密码的处理