2020年“感恩杯”台州学院第十三届大学生程序设计竞赛D、H、I题解(后续补充)
D题:小z与他的袜子
描述
小z每天会穿一双新袜子。
开始他的衣柜里有n双袜子,袜子会从1~n进行编号。每天早上他都会从衣柜里拿编号最小的袜子来穿。每天晚上他会把今天穿的袜子扔进篮子里,如果篮子里有n-1双袜子了,懒惰的小z就得必须把他们洗掉,明天晚上他们会重新放进衣柜里。
小z想知道在第k天他应该穿哪双袜子。
输入
输入为1行,分别是小z的袜子数n和天数k。(2<n<103,1<k<104)
输出
输出为1行,为小z第k天穿的袜子编号。
样例输入
2 7
样例输出
1
思路:按题意模拟,会发现前n天 穿的袜子编号是1到n,n天之后会以2*(n-1)天循环穿1~(n-1)~1~(n-2)编号的袜子。
代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5; int a[N];
int main() {
int n,k;
cin>>n>>k;
if(k<=n) cout<<k<<endl;
else {
int e = 0;
k-=n;
for(int i = 1;i < n;i++) {
a[++e] = i;
}
for(int i = 1;i < n-1;i++) {
a[++e] = i;
}
a[++e] = n;
a[0] = a[e];
cout<<a[k%e]<<endl;
}
}
H题:小z的遥控车
描述
小z新买了一辆遥控车,这个遥控车的遥控器上的按键按一次可以
1.前进或后退1m
2.前进或后退7m
3.前进或后退10m
现在他想跑x米,x>0,代表前进x米,x=0,代表原地不动,x<0,代表后退x米。小z想知道他的最小操作数。
输入
数据包含多组,第一行为整数T(1≤T≤100),代表测试的组数。
下面有T组数据,每组1行,为1个整数x,即小z想跑的距离(-100<=x<=100)。
输出
每组输出一行,即小z的操作次数。
样例输入
3
8
0
-7
样例输出
2
0
1
题意:在一维坐标上走x米,求最小操作次数。 题目给出了6种操作方式:(1.前进或后退1m。2.前进或后退7m。 3.前进或后退10m。)
题意相当于给你x米,用6种操作方式使x变成0。如何得到最小的操作次数呢,先不管。康这里,如果能让6种操作方式同步在x上进行,每同时进行一次,操作次数加1,每次对x操作后得到的值xx在之前的操作中没出现过,就把xx和操作数存起来,直到某一步操作中把x变成了0,那么对应的step就是最小操作次数。
代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5; int dx[]={-1,1,-7,7,-10,10};
map<int,bool>mp;///标记
int BFS(int x) {
queue<pair<int,int> >qu;///pair也可以换成结构体
qu.push({x,0});///初始化操作值 和 操作次数
mp.clear();///map放全局使用前记得清空
while(qu.size()){
x = qu.front().first;
int step = qu.front().second;
qu.pop();
if(x==0) return step;
step++;
for(int i = 0;i < 6;i++) {
int now = x+dx[i];
if(!mp[now]) {
mp[now] = true;
qu.push({now,step});
}
}
}
}
int main() {
int T;
cin>>T;
int x;
while(T--) {
cin>>x;
cout<<BFS(x)<<endl;
}
}
I题:小z的班级平时分
描述
小z的美术老师还没有把班上学生认全,于是他从班主任手上拿到了教室座位表。座位表有n行m列,上面写着学生的姓名拼音,小z班上没有学生重名,如果为None(不会全为None),表示当前座位没有坐人。
开始时所有人的平时分均为0分,迟到一次扣5分,回答一次问题得3分;第x排第y列迟到了,美术老师会记录下“1 x y”,第x排第y列回答了问题,美术老师会记下“2 x y”。
慢慢地美术老师已经把班级同学全都认识了,但是她想知道之前分别是谁获得最高分和最低分。
输入
输入数据包含多组,以EOF作为结束。
第一行为整数n和m,代表这个教室为n行m列(1<=n,m<=10)。
接下来n行每行为m个学生的名字,之间用空格隔开,学生名字不含空格,且不超过20个字符。
第n+2行为整数q(0<=q<=100),代表美术老师记录的条数。
接下来q行,每行均为3个整数op,x,y,代表第x行第y列的学生迟到或回答了问题(见描述)。
输出
每组输出两行。
第一行为得分最高的学生姓名及分数,如果分数相同,请输出字典序较小的学生姓名,中间用空格隔开。
第二行为得分最低的学生姓名及分数,如果分数相同,请输出字典序较小的学生姓名,中间用空格隔开。
样例输入
3 3
ChenggongZheng SanZhang SiLi
FeihongHuang BaoyuJia DaiyuLin
None BaochaiXue XifengWang
5
1 1 2
1 3 3
2 1 1
2 3 3
1 1 2
样例输出
ChenggongZheng 3
SanZhang -10
这里的(1<=n,m<=10) 可以直接用二维数组加结构体模拟位置,模拟完之后要排序,二维数组怎么排序呢,我也不懂,那就把二维转成一维。排序可以用sort,可以在结构体里重载排序函数,也可以自己写一个排序函数放在sort的第三个参数位置。排好序后就是输出了。如果按成绩从高到底,相同成绩按名字字典序从小到大(两个字符串的字典序大小:同时从第一个字符开始比较,以26英文字母顺序后者比前者大排,某个位置比较出了大小就结束比较),那么下标是0的一维数组结构体存的信息就是最高分及同分名字字典序最小的。找最低分且名字字典序最小,就要从排好序的数组里从后往前遍历,如果遍历到下标 [ i ] 数组存的分数信息不等于最后一个下标存的分数信息,就输出下标【i+1】数组的信息即可。
上面罗里吧嗦了一堆。
再加上特殊考虑最高分和最低分可能是同一个人即可。
代码

#include<bits/stdc++.h>
using namespace std;
const int N = 100+5; struct node {
string s;
int num;
bool operator<(const node a) {
if(num!=a.num)
return num>a.num;
return s < a.s;
}
}b[N],a[N][N];
int main() {
int n,m;
string s;
while(cin>>n>>m) {
for(int i = 1;i <= n;i++) {
for(int j = 1;j <= m;j++) {
cin>>s;
a[i][j] ={s,0};
}
}
int T;
cin>>T;
int e = -1;
int id,x,y;
while(T--) {
cin>>id>>x>>y;
if(id==1) a[x][y].num-=5;
else if(id==2) a[x][y].num+=3;
}
for(int i = 1;i <= n;i++) {
for(int j = 1;j <= m;j++) {
if(a[i][j].s!="None")
b[++e] = a[i][j];
}
}
sort(b,b+e+1);
cout<<b[0].s<<' '<<b[0].num<<endl;
for(int i = e;i>=0;i--) {
if(i==0||b[e].num!=b[i].num) {
if(b[e].num!=b[i].num) i++;
cout<<b[i].s<<' '<<b[i].num<<endl;
break;
}
} }
}
2020年“感恩杯”台州学院第十三届大学生程序设计竞赛D、H、I题解(后续补充)的更多相关文章
- 《内蒙古自治区第十三届大学生程序设计竞赛试题_H 公孙玉龙》
这个题有点小坑,最坑的地方就是 输入的b 变量 有可能 是 负数 ! 负数 ! 负数! 对 ,你没有看错,就是负数,坑死我了, 一直都是 content.charAt(0) 判断 ...
- “纽劢科技杯”第十六届同济大学程序设计竞赛暨上海邀请赛同步赛 J-张老师的游戏
传送门 题目描述 在空闲时间,张老师习惯性地和菜哭武玩起了取石子游戏,这次的游戏规则有些不同,在他们面前有n堆石子,其中,第i堆石子的个数为a[i],现在制定规则如下: 从张老师开始, ...
- B P5 第十三届北航程序设计竞赛预赛
https://buaacoding.cn/contest-ng/index.html#/188/problems 其实这题挺简单的. 注意到答案的大小最多是22 二分,check长度是mid的不同子 ...
- 第十三届北航程序设计竞赛决赛网络同步赛 B题 校赛签到(建树 + 打标记)
题目链接 校赛签到 对每个操作之间建立关系. 比较正常的是前$3$种操作,若第$i$个操作属于前$3$种,那么就从操作$i-1$向$i$连一条有向边. 比较特殊的是第$4$种操作,若第$i$个操作属 ...
- “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 A noj 2073 FFF [ 二分图最大权匹配 || 最大费用最大流 ]
传送门 FFF 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 145 测试通过 : 13 ...
- 黑龙江省第七届大学生程序设计竞赛-Mysterious Organization
描述 GFW had intercepted billions of illegal links successfully. It has much more effect. Today, GFW i ...
- 黑龙江省第七届大学生程序设计竞赛-Heap
描述 A heap is a full binary tree; for each node, its key is greater than its two sub-node’s key. Two ...
- 浙江财经大学第十五届大学生程序设计竞赛------B 烦恼先生打麻将
问题 B: B - 烦恼先生打麻将 时间限制: 1 Sec 内存限制: 256 MB提交: 8 解决: 5[提交][状态][讨论版] 题目描述 输入 6 6 Z D 1S 1S 9W 5W 2S ...
- ZOJ 4100 浙江省第16届大学生程序设计竞赛 A题 Vertices in the Pocket 线段树+并查集
正赛的时候完全没看这个题,事后winterzz告诉我他想出来的解法. 首先题意是给出n个点,m次操作. 操作有一种是连接两个点,另一种是求此时再为这个图连k条边,最少和最多能有几个联通块. 最少的求法 ...
随机推荐
- JavaScript中的链式调用
链模式 链模式是一种链式调用的方式,准确来说不属于通常定义的设计模式范畴,但链式调用是一种非常有用的代码构建技巧. 描述 链式调用在JavaScript语言中很常见,如jQuery.Promise等, ...
- 2020 CSP-J 多校赛 Day 2 T2 题解
0x01 引入 在考场时想了一个错误算法,口胡一下,或许对理解正解有点帮助. 我们考虑交换两个数产生的代价,你会发现我们需要让大的数重复被交换的次数尽可能少,减少它对后面的代价. 那么不难构思出一个按 ...
- Django中ModelForm详解
1.ModelForm组件介绍:这个组件的功能就是把model和form组合起来 2.ModelForm的使用 1.首先需要导入ModelForm from django.forms import M ...
- Java集合【5】-- Collections源码分析
目录 一.Collections接口是做什么的? 二.Collections源码之大类方法 1.提供不可变集合 2.提供同步的集合 3.类型检查 4.提供空集合或者迭代器 5.提供singleton的 ...
- 经典面试题解析:这道 C 编程面试题居然有如此多的解法!
问题描述 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是一道比较经典的题目了,相信不少人面试的时候可能遇到 ...
- T-SQL——基础语法
目录 0. 定义变量 1. 批处理 2. 条件逻辑--IF 3. 逻辑分支--CASE 4. 循环语句--WHILE 5. 附录--关于CASE表达式的实现函数 6. 参考 shanzm-2020年1 ...
- 微信小程序里如何使用npm?小程序集成友盟举例
1.执行npm初始化指令 小程序根目录,命令执行如下指令: npm init 执行后会让加载项目初始信息,具体截图如下: 2.执行安装npm包指令 在这我们举个例子,以接入友盟统计SDK为例,执行命令 ...
- python核心高级学习总结8------动态性、__slots__、生成器、迭代器、装饰、闭包
python的动态性 什么是动态性呢,简单地来说就是可以在运行时可以改变其结构,如:新的函数.对象.代码都可以被引进或者修改,除了Python外,还有Ruby.PHP.javascript等也是动态语 ...
- java并发编程实战《四》互斥锁(下)
互斥锁(下):如何用一把锁保护多个资源? 一把锁可以保护多个资源,但是不能用多把锁来保护一个资源. 那如何保护多个资源? 当我们要保护多个资源时,首先要区分这些资源是否存在关联关系. 如下代码 ...
- java并发编程实战《一》可见性、原子性和有序性
可见性.原子性和有序性问题:并发编程Bug的源头 核心矛盾:CPU.IO.内存三者之间的速度差异. 为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构.操作系统.编译程序都做出了贡献 ...