目录

1 寝室分西瓜

2 隔离警戒线

3 无接触水龙头

4 掷骰子


1 寝室分西瓜

小W排了很久的队买了好几个西瓜,西瓜的重量是整数斤的,他和室友们分着吃。非常喜欢偶数的他们决定把这些西瓜分别分成偶数斤的六份,现在考考你能不能按这种方式分这些西瓜?如果能分的话,最重的那一份比最轻的那一份最少多多少斤?

输入格式:

第一行一个正整数n表示西瓜的数量。
接下来n行每行一个正整数ai​表示当前西瓜的重量。

输出格式:

输出n行。
如果第i个西瓜可以分成六份偶数斤就输出一个整数x表示分的最重的那一份比最轻的那一份最少多多少斤。

如果第i个西瓜不能这样分则输出-1。

输入样例:

在这里给出一组输入。例如:

2
14
15

输出样例:

在这里给出相应的输出。例如:

2
-1

样例解释1

第一个西瓜只有一个分法:分成2,2,2,2,2,4,最重的比最轻的多2斤。

第二个西瓜不能分成偶数斤的六份。

数据范围与提示

1≤n≤10

1≤ai​≤100

思路:

若 n 为奇数(没法分偶数),或 n 小于 12(不够分偶数),输出 - 1

若 n 可以分,若 n 可以整除 12 ( n 可以每人分一样的一份),输出 0,若无法整除 12,则余数必为 2,因为题目意思为 最大值 与 最小值的 最小差值。

举例:16 % 12 = 4,可以分为 2 2 2 2 4 4,22 % 12 = 10,可以分为 2 4 4 4 4 4,总之只要不是-1的情况的无法整除12的数,一律输出 2

代码如下:

#include <bits/stdc++.h>using namespace std;typedef long long int LL;const int N = 2e5+10;int n, m;int main()
{int T;scanf("%d", &T);while(T -- ){int n;scanf("%d", &n);if( n%2 || n < 12){printf("-1\n");continue;}else{int res = 0;if(n % 12 != 0) res = 2;printf("%d\n", res);}}return 0;
}

2 隔离警戒线

郑州封控了多个社区,现在把这些社区抽象成二维平面上的互不重叠的长方形,问你给这些社区拉警戒线需要多少单位长度的警戒线?

输入格式:

第一行一个正整数n表示封控社区的数量。
接下来n行每行四个正整数x1,y1,x2,y2(1≤x1<x2≤1e6,1≤y1<y2≤1e6)表示被封控社区的左下角坐标和右上角坐标。

输出格式:

输出一行一个正整数表示需要警戒线的长度。

输入样例:

3
2 1 4 3
4 1 6 3
3 3 5 5

输出样例:

20

样例解释

样例的三个封控地区如上所示,需要20单位长度的警戒线。

数据范围与提示

1≤n≤100

1≤x1<x2≤1e6,1≤y1<y2≤1e6

思路:

(1) 首先明确变量含义,x1y1为矩形左下点,x2y2为矩形右上点

(2) 计算总长度等于,每个小方框的周长 - 重合的边的长度,输入一个方框枚举一下与之前的方块是否重合,重合则减去重合边长

(3) 如何计算重合的长度?

两个方框有两种状态重合,举例

如图所示可化为重合的两种方式

(此题不能变化,此例子帮助理解两种情况而已)

当 y 轴重合,即如上图所示的情况,第一种重合为 x1[ j ] == x2[ i ] ,第二种重合为 x1[ i ] == x2[ j ] ,计算重合的部分(红色部分)的长度,可如此计算(和 WAWA鱼大佬学习的方法),

两上边取最小值 - 两下边取最大值 ,再与零 取最值,代码解释为:

max(0, min(y2[i], y2[j]) - max(Y1[i], Y1[j]));

若两边无交集,则第二项为负数,如此则减去0,反之为正数,则减去重复的部分

对于 x 轴的重合部分亦是如此

max(0, min(x2[i], x2[j]) - max(x1[i], x1[j]));

详细代码如下:

#include <bits/stdc++.h>using namespace std;typedef long long int LL;const int N = 110;int n, m;
int x1[N], Y1[N], x2[N], y2[N];int main()
{scanf("%d", &n);int res = 0;for(int i = 0; i < n; i ++ ){scanf("%d%d%d%d", &x1[i], &Y1[i], &x2[i], &y2[i]);res += (x2[i] - x1[i]) * 2 + (y2[i] - Y1[i]) * 2;}for(int i = 0; i < n; i ++ ){for(int j = 0; j < i; j ++ ){if(x1[i] == x2[j] || x2[i] == x1[j])res -= max(0, min(y2[i], y2[j]) - max(Y1[i], Y1[j]));else if(Y1[i] == y2[j] || y2[i] == Y1[j])res -= max(0, min(x2[i], x2[j]) - max(x1[i], x1[j]));}}cout << res << endl;return 0;
}

3 无接触水龙头

新冠疫情席卷全球已经两年有余,每个人都在为战胜这场灾难贡献自己的力量,希望这场灾难早日过去。

为了减少公共场所人与人间接接触的概率,大学生小D发明了一款自动洗手器。这款机器基于红外线感应的原理,用户只需要把手伸到水龙头下方即可自动出水,不需要再动手操作开关,这样就减少了病毒残留在开关处传播的风险。

小D这款设备的运行逻辑是:当设备的出水倒计时不为0时,水龙头会出水,并且倒计时随着时间减少。每当红外线感应器感应到有人伸手,就会将出水倒计时重置为t秒,出水倒计时为0秒时停止出水。

现在小D给了你感应器的记录列表,里面记录了在什么时间感应到了用户伸手,想请你计算在设备的运行过程中,总共流了多少秒的水。这样以便他对设备继续更新。

输入格式:

第一行两个整数n,t (1≤n≤105,1≤t≤109)分别表示记录的条数和仪器每次出水的时间。
其后n行,每行是一个时间,表示在该时刻感应到了用户使用该仪器。
时间的格式是 yyyy-MM-dd HH:mm:ss。其中y是年份,M是月份,d是日期,H是小时,m是分钟,s是秒数。 比如: 2022-05-08 01:12:34,表示:2022年5月8号1点12分34秒。
数据保证年份是2020年-2022年。
不保证时间的顺序。

输出格式:

输出一行一个整数,表示水龙头在运行过程中总的出水秒数。

输入样例:

2 10
2020-01-01 12:00:09
2020-01-01 12:00:00

输出样例:

19

思路

预处理:

将输入的时间转化成秒来计算,此处可用二维数组把三年中的每一个月都表示出来(也可以表示平年的月份,再判断闰年),计算从2020-01-01到输入时间的时间差(单位:秒),排序时间差;

计算 res(结果):

两数的差与水龙头单词流水的时间(ll) 取 min ,最后再加上一个水龙头单次流水的时间,最后一次一定流完,输出结果即可

代码如下:

#include <bits/stdc++.h>using namespace std;typedef long long int LL;const int N = 2e5+10;int n, m;
int len[3] = {0, 366, 731};
int mon[3][13] = {{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};int main()
{LL T, ll;scanf("%lld %lld", &T, &ll);LL time[N];for(int i = 0; i < T; i ++ ){int year, m, d, hh, mm, ss;scanf("%d-%d-%d %d:%d:%d", &year, &m, &d, &hh, &mm, &ss);time[i] = len[year-2020] * 24 * 3600;for(int j = 1; j < m; j ++ )time[i] += mon[year-2020][j]*24*3600;time[i] += (d-1) * 24 * 3600;time[i] += hh*3600 + mm*60 + ss;}sort(time, time + T);LL res = 0;for(int i = 1; i < T; i ++ )res += min((time[i] - time[i-1]), ll);printf("%lld\n", res + ll);return 0;
}

4 掷骰子

511寝室有6名同学,分别是小A,小B,小C,小D,小E和小F。由于每天吃盒饭,宿舍中产生了很多垃圾,所以他们需要每天都有人下去把全宿舍的垃圾都倒掉。

前六天,他们轮流下去倒垃圾(第一天是小A,第二天是小B....第六天是小F),一轮过后,他们感觉这样很无聊,所以从第七天开始,他们决定用掷骰子的方式,选出每天倒垃圾的人。

掷骰子的规则是:

每人每天掷出一个色子1、如果有一个人点数最小且没有人与他并列,那么他就要去倒垃圾2、否则,在色子点数并列最小的这些人中,选出幸运值最大的去倒垃圾。定义x的幸运值为:x上一次倒垃圾的日子距离今天的天数。(例如,小A在第七天的幸运值为6,因为他上一次去倒垃圾的日子是第1天)

现在给出这n天(从第7天到第n+6天)掷骰子的结果,请计算出这n天倒垃圾的人分别是谁。

输入格式:

第1行 一个整数n(n≤100),表示掷骰子的天数。

下面n行,每行6个数字,第i行为Ai​ Bi​ Ci​ Di​ Ei​ Fi​,分别代表第i+6天每个人分别掷出的点数。保证点数为1~6之间的整数。

输出格式:

n行,每行一个字母。(ABCDEF其中的一个)

其中,第i行输出第i+6天去倒垃圾的人。

输入样例:

在这里给出一组输入。例如:

3
1 5 4 3 6 1
3 6 2 4 3 2
2 1 3 6 4 3

输出样例:

A
C
B

思路

开一个 last 数组记录此人上一次的时间,找出本次的最小值,一个则直接算,多个则比较本次与上一次的相差天数,相差天数大的人先上,最后记得更新一下 倒垃圾人的 last 值

代码如下

#include <bits/stdc++.h>using namespace std;typedef long long int LL;const int N = 10;int n, m;
int last[N] = {0, 1, 2, 3, 4, 5, 6};int main()
{int T;scanf("%d", &T);for(int tt = 7; tt < 7 + T; tt ++ ){int mi = 7, cnt = 1, x;int a[N];vector<int> b;// 查找最小值的数值for(int i = 1; i <= 6; i ++ ){scanf("%d", &a[i]);if(a[i] < mi) mi = a[i];}// 查找最小值的人for(int i = 1; i <= 6; i ++ )if(mi == a[i]) b.push_back(i);// 判断int lmi = tt - last[b[0]];int t = b[0];for(int i = 1; i < b.size(); i ++ )if( tt - last[b[i]] > lmi ) lmi = tt - last[b[i]], t = b[i];// 更新 lastlast[t] = tt;printf("%c\n", 'A' + t - 1);}return 0;
}

郑州大学“战疫杯”大学生程序设计在线邀请赛(6)(C++题解+详细思路)2022年5月14日相关推荐

  1. 郑州大学“战疫杯”大学生程序设计在线邀请赛(1)题解(Python版本)

    "战疫杯"大学生程序设计在线邀请赛(1)题解 1. 我的账本 简单模拟题: 用一个数组 a ,来统计每个人钱的情况 对于每次买饭的操作,如果1号买饭,1号对应的数也就是a[1] + ...

  2. 郑州大学“战疫杯”大学生程序设计在线邀请赛(2)(C++题解+详细思路)2022年5月10日

    目录 1 公司的Logo 2 解封日期 3 语音设备是否正常? 1 公司的Logo 为了感谢河南省八六三软件有限公司对战疫杯ACM在线程序设计竞赛的大力支持,小Y决定为公司制作个logo. logo通 ...

  3. 郑州大学“战疫杯”大学生程序设计在线邀请赛(1)(C++题解+详细思路)2022年5月9日

    目录 1 我的账本 2 核酸检测扫码 3 辛苦的楼长 4 等待做核酸 1 我的账本 当前疫情防控形势严峻,学校为了减少同学们因为吃饭造成的聚集,规定一个寝室每次派个代表出去买饭,小W寝室的6人(编号1 ...

  4. 郑州大学“战疫杯”大学生程序设计在线邀请赛(5)(C++题解+详细思路)2022年5月13日

    目录 1 感染源在哪里 2 病毒序列 3 奇奇怪怪的形状 1 感染源在哪里 通过最近的一次核酸检测,疫情防控小组检测到了若干个阳性人员,通过调取行程码数据,防控小组获取到了这些病例曾经去过的地点.现在 ...

  5. “战疫杯”大学生程序设计在线邀请赛(6)题解

    "战疫杯"大学生程序设计在线邀请赛(6)题解 最后一场,第二题没做出来,想复杂了,可惜┭┮﹏┭┮ 1. 寝室分西瓜 分这些西瓜,每份是偶数,那么至少是12才够6个人分成最小的2,所 ...

  6. “战疫杯”大学生程序设计在线邀请赛(1)

    4题全为 :暴力/模拟 目录 我的账本 输入格式: 输出格式: 输入样例: 输出样例: 样例解释1 数据范围与提示 AC代码如下: 核酸检测扫码 输入格式: 输出格式: 输入样例: 输出样例: AC代 ...

  7. “战疫杯”大学生程序设计在线邀请赛(2)

    1 公司的Logo #include<bits/stdc++.h> using namespace std; char g[50][50]; signed main() {for(int ...

  8. 2022年3月14日蓝桥杯基础算法能力测试

    最晚提交时间,3月15日晚22:00,过时无法提交. 今晚上没交ppt和开班会的正常进行.明天你们至少一个上午或下午没有课,可以做.做完下面有提交地址.认真做,不要去百度,没啥难的. A.哪天返回(基 ...

  9. Enlight官方第三届“金融帝国杯”玩家游戏视频邀请赛《竞赛规则》(2022.12.23修订)

    『金融帝国实验室』(Capitalism Lab)Enlight官方第三届"金融帝国杯" 玩家游戏视频邀请赛<竞赛规则>(2022年10月5日发布,2022年12月23 ...

  10. 第13届蓝桥杯省赛真题剖析-2022年4月17日Scratch编程初中级组

    [导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第122讲. 第13届蓝桥杯省赛举办了两次,这是202 ...

最新文章

  1. (android实战)Service 生命周期和使用注意项
  2. Struts01---入门小案例
  3. 2012 winter training @HIT Day 2 解题报告
  4. 经典排序算法 - 鸡尾酒排序Cocktail sort
  5. 计算机科学申请文书,美国留学:看牛人怎么写申请计算机CS专业的文书
  6. Python课堂上我与学生斗智斗勇已8个学期
  7. linux运维实战练习-2015年8月30日课程作业(练习)安排
  8. AWS API Gateway Swagger定义
  9. 使用listen()和accept()函数
  10. 一位中科院计算机女生的读博日记
  11. php手机号批量分类,一个非常好的php实现手机号归属地查询接口类
  12. Tex中参考文献的引用方法
  13. FreeIPA问题记录
  14. java实现电脑定时关机重启_利用任务计划程序实现电脑自动定时关机
  15. 办税、缴税,原来支付宝里就能搞定
  16. 309 Best Time to Buy and Sell Stock with Cooldown
  17. Springboot 日志、配置文件、接口数据脱敏
  18. vue-router3路由配置一 路由搭建
  19. 对几个汇编编译器的初步评价(MASM/FASM/NASM/GOASM)
  20. 数据基本类型各占几个字节?

热门文章

  1. 群辉linux系统,群晖 篇五 提高群晖系统可靠性----Linux系统优化
  2. 华为设备IP路由表管理命令
  3. 华为服务器串号官网查询系统,查询服务器序列号
  4. 信息系统项目管理师(高项)考试的论文怎么写,怎么背?经验分享
  5. Android网络验证逆向,【Android逆向】去除无聊的网络验证弹窗与360加固
  6. 客快物流大数据项目(六十八):工作流调度
  7. 当索尼停产单反:好产品是怎么被时代「消融」的?
  8. Eclipse下SVN工具使用
  9. 率辉c语言,C语言真题
  10. java中的方法重载