郑州大学“战疫杯”大学生程序设计在线邀请赛(1)题解(Python版本)
“战疫杯”大学生程序设计在线邀请赛(1)题解
1. 我的账本
简单模拟题:
用一个数组 a ,来统计每个人钱的情况
对于每次买饭的操作,如果1号买饭,1号对应的数也就是a[1] + 5 * 支付钱数即可,而其他的舍友,每次减少支付钱数即可,最后输出没有空行
a = [0] * 7
n = int(input())
for i in range(n):x,y = map(int,input().split())for j in range(1,7):# 如果让舍友买饭,就减下钱数if j != x:a[j] -= y# 买饭的人加上钱数*5a[x] += (5*y)
for i in range(1,7):if i != 6:print(a[i],end=" ")else:print(a[i],end="")
2. 核酸检测扫码
原本想错了,想成dfs判断连通性的问题,写了几十行代码,发现好多个联通块,输出了十几个点
后来仔细读题,发现直接模拟开搞
思路:读入每行的字符串之后,存入数组
另外开一个vis数组标记每次是否遍历过该点,如果遍历过直接跳过(用于剪枝,可以优化)
另外如果是0开头的直接跳过,还有如果下方和右方点的数量小于8的直接跳过
需要判断的只有1开头的以及没有遍历过的,用64个字符逐个字符对比,如果对比成功,标记这64个点(不重复遍历),并且加入开头点的坐标
最后答案输出前排一下序即可
n,m = map(int,input().split())
g = []
for i in range(n):g.append(input())
vis = [[0] * 1010 for _ in range(1010)]
nums = []
s = "1111111110000001101111011011110110111101101111011000000111111111"
for i in range(n):for j in range(m):if g[i][j] == '0' or vis[i][j] == 1 or i + 8 > n or j + 8 > m:continueif g[i][j] == '1':# 标记是否能够对比成功flag = True# 逐字符遍历时记录下标cnt = 0for k in range(i,i+8):for l in range(j,j+8):if g[k][l] == s[cnt]:cnt += 1# 逐字符对比失败跳出循环else:flag = Falsebreak# 对比成功后加入该顶点坐标 并标记该8*8方块上的点if flag:nums.append([i,j])for k in range(i,i+8):for l in range(j,j+8):vis[k][l] = 1
nums.sort(key = lambda x: (x[0],x[1]))
for i in range(len(nums)):print(nums[i][0],nums[i][1])
3. 辛苦的楼长
大模拟直接开搞
# 测试组数
t = 3
nums = []
# 映射
dic = {"song" : 0,"jv":1,"liu":2}
# 三个类型的数组
cnt1,cnt2,cnt3 = [],[],[]
dish = [[0] * 3 for _ in range(3)]
for i in range(t):n = int(input())s = []for j in range(n):ts = input()nums.append(ts)s.append(ts)morning,moon,night = 0,0,0for i in range(len(s)):s1,s2,s3,s4,s5 = s[i].split(" ")yuan,lou = s1[:-1],s1[-1]m = dic[yuan]# 通过映射的下标,简化代码dish[m][0] += int(s3)dish[m][1] += int(s4)dish[m][2] += int(s5)if m == 0:cnt1.append(s[i])if m == 1:cnt2.append(s[i])if m == 2:cnt3.append(s[i])
# 关键字排序 注意数组切片的 起始点和终点
cnt1.sort(key = lambda x : (int(x[4]),int(x[6:9])))
cnt2.sort(key = lambda x : (int(x[2]),int(x[4:7])))
cnt3.sort(key = lambda x : (int(x[3]),int(x[5:8])))
# 输出答案
# 先输出每个园区的点餐的宿舍数,早中晚的数量
# 再输出每个园区降序排列后的字符串
print(len(cnt1),dish[0][0],dish[0][1],dish[0][2])
for i in range(len(cnt1)):print(cnt1[i])
print(len(cnt2),dish[1][0],dish[1][1],dish[1][2])
for i in range(len(cnt2)):print(cnt2[i])
print(len(cnt3),dish[2][0],dish[2][1],dish[2][2])
for i in range(len(cnt3)):print(cnt3[i])
4. 等待做核酸
简单模拟,比第三题难度小
没有涉及任何概率论和期望的算法
用一个表简单模拟一下样例
理论到来时间 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
---|---|---|---|---|---|---|---|---|---|
去的时间 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 |
等待时间 | 0 | 0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
期望值 | 0 | 0 | 0 | 1/30 | 2/30 | 3/30 | 4/30 | 5/30 | 6/30 |
所以直接统计转化一下时间为分钟后,累加分子,分子是大于去的时间的累加和
(1 + 2 + … + 14) / 30 ,最后保留两位小数输出
不循环求和也可以通过等差公式来做,O(1)做法
(a1 + an ) * n / 2 ,这样写的转换一下即可
数据范围小无所谓了_
t = input().split("-")
m = input()
nums = []
t1,t2 = t[0],t[1]
m1,m2 = int(t1[:2]) * 60 + int(t1[3:]), int(t2[:2]) * 60 + int(t2[3:])
for i in range(m1,m2+1):nums.append(i)
m3 = int(m[:2]) * 60 + int(m[3:])
fz,fm = 0,len(nums)
for i in range(len(nums)):if nums[i] > m3:fz += (nums[i] - m3)
print("%.2f"%(fz/fm))
郑州大学“战疫杯”大学生程序设计在线邀请赛(1)题解(Python版本)相关推荐
- 郑州大学“战疫杯”大学生程序设计在线邀请赛(2)(C++题解+详细思路)2022年5月10日
目录 1 公司的Logo 2 解封日期 3 语音设备是否正常? 1 公司的Logo 为了感谢河南省八六三软件有限公司对战疫杯ACM在线程序设计竞赛的大力支持,小Y决定为公司制作个logo. logo通 ...
- 郑州大学“战疫杯”大学生程序设计在线邀请赛(1)(C++题解+详细思路)2022年5月9日
目录 1 我的账本 2 核酸检测扫码 3 辛苦的楼长 4 等待做核酸 1 我的账本 当前疫情防控形势严峻,学校为了减少同学们因为吃饭造成的聚集,规定一个寝室每次派个代表出去买饭,小W寝室的6人(编号1 ...
- 郑州大学“战疫杯”大学生程序设计在线邀请赛(5)(C++题解+详细思路)2022年5月13日
目录 1 感染源在哪里 2 病毒序列 3 奇奇怪怪的形状 1 感染源在哪里 通过最近的一次核酸检测,疫情防控小组检测到了若干个阳性人员,通过调取行程码数据,防控小组获取到了这些病例曾经去过的地点.现在 ...
- “战疫杯”大学生程序设计在线邀请赛(6)题解
"战疫杯"大学生程序设计在线邀请赛(6)题解 最后一场,第二题没做出来,想复杂了,可惜┭┮﹏┭┮ 1. 寝室分西瓜 分这些西瓜,每份是偶数,那么至少是12才够6个人分成最小的2,所 ...
- “战疫杯”大学生程序设计在线邀请赛(1)
4题全为 :暴力/模拟 目录 我的账本 输入格式: 输出格式: 输入样例: 输出样例: 样例解释1 数据范围与提示 AC代码如下: 核酸检测扫码 输入格式: 输出格式: 输入样例: 输出样例: AC代 ...
- “战疫杯”大学生程序设计在线邀请赛(2)
1 公司的Logo #include<bits/stdc++.h> using namespace std; char g[50][50]; signed main() {for(int ...
- 吉首大学第十届“新星杯”大学生程序设计大赛 A题题解
这是一场很毒瘤的比赛. 鲁大师在一个星期前通知我们去打这场比赛,说名次高的有奖品,还说去年他们去参加这场比赛拿了前几名拿了个U盘-(疯狂暗示比赛很简单比赛很简单 ) 单纯的我真的信了 赛后得知这场比赛 ...
- “战疫杯”在线邀请赛——第五场题解
"战疫杯"在线邀请赛--第五场题解 题目详情 - 1 感染源在哪里 (pintia.cn) 通过最近的一次核酸检测,疫情防控小组检测到了若干个阳性人员,通过调取行程码数据,防控小组 ...
- 2020 年 “联想杯”全国高校程序设计在线邀请赛H. Hay Mower
2020 年 "联想杯"全国高校程序设计在线邀请赛H. Hay Mower 题意:n × m 网格图,每个格子内的草每秒增加 ai,j,接下 来 k 个操作,每个操作会在某个时间把 ...
最新文章
- 判断两直线段是否相交
- LeetCode 230. Kth Smallest Element in a BST--C++,Python解法--面试真题--找二叉树中第K小的元素
- Linux C :线程操作和线程同步的多线程并发编程
- Python学习系列:PyCharm CE 安装与测试
- 我的世界java版记分板_我的世界计分板指令 如何使用计分板教程
- 北大OJ(POJ 2808)校门外的树
- ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
- 【To Read】LeetCode | Jump Game II(转载)
- Bundle Adjustment原理及应用
- 三星手机怎么看html5,高端手机什么样?看三星S20 FE 5G就知道了
- 23_Shell语言————位置变量($@、$、$#、shift)
- https://blog.csdn.net/zxp_cpinfo/article/details/53692922
- 云计算实训总结_云计算·实训报告书
- 最好的投资理财工具 - 基金
- Android系统裁剪:手把手教你如何进行系统裁剪
- 猜拳游戏android报告,android 之猜拳游戏练习
- 知识产权贯标认证的好处,如何申请?
- PhotoShopCS6报错error:16解决办法
- 谷歌地图谷歌地图_为您的Google地图增添真实感
- 糖价回暖,甩掉包袱的南宁糖业能跑多快?