【2021暑期训练-2】9-7 完美配对1(数据增强版)
给定一个长度为 n 的整数序列 a1 , a2 , … , an。我们称一个二元组(i,j)是完美配对的,当且仅当 i<j 并且 ai−aj=j−i.求完美配对的二元组数目(与原先不同的是ai的数据范围变大了).
对于前 3 个测试点
1≤n≤103
对于后两个测试点
1≤n≤105
所有的测试点都满足
1≤ai≤109
输入格式:12na1 a2 ... an
输出格式:输出完美配对的二元组数目
输入样例:1253 2 5 2 6
输出样例:仅有一对二元组(1, 2)满足条件, 因为 3 - 2 = 2 - 1.
11
思路思路与开营测试时一样
将n个数存入vector,若a[i]+i=a[j]+j,则a[i]与a[j]完美配对。于是需要标记a[i]+i,但是a[i]+i的数据过大,数组无法存储,需要使用unordered_map标记
代码123456789101112131415161718192021222324#include <iostream>#include <vector>#include <unordered_map>u ...
【2021暑期训练-2】9-6 天梯赛的善良
天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。
于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的),然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。
输入格式:输入在第一行中给出一个正整数 N(≤2×104),即参赛学生的总数。随后一行给出 N 个不超过 106 的正整数,是参赛学生的能力值。
输出格式:第一行输出所有参赛学生的最小能力值,以及具有这个能力值的学生人数。第二行输出所有参赛学生的最大能力值,以及具有这个能力值的学生人数。同行数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例:121086 75 233 888 666 75 886 888 75 666
输出样例:1275 3888 2
思路这个题需要记录每个数字和与其对应的个数,输出最大和最小的数出现的次数。这是一个映射关系,所以使用STL库中的map。
代码12345678910111213141516171819#incl ...
【2021暑期训练-2】9-5 连续因子
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:输入在一行中给出一个正整数 N(1<N<2^31)。
输出格式:首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:1630
输出样例:1235*6*7
思路用start来记录连乘的第一个因子,len来记录连续因子的长度,都初始化为0。如果start遍历之后仍未0,说明n在2-sqrt(n)范围之内没有因子,即n为素数,直接输出1和n就行了;否则输出[tart,start+len]
注意判断素数情况
代码12345678910111213141516171819202122232425#include <iostream>#include <cmath>using namespace std;int mai ...
每日分享day09-C++常用库函数
河北大学暑期程序设计训练每日知识分享-day09
每日分享——C++常用库函数
每日分享day08-正则表达式
河北大学暑期程序设计训练每日知识分享-day08
每日分享——正则表达式正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。本书从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值和前后查找,等等。每章都为读者准备了许多简明又实用的示例,有助于全面、系统、快速掌握正则表达式,并运用它们去解决实际问题。
正则表达式多用于判断字符串是否满足某种特定格式,例如用户注册时输入邮箱,使用正则表达式技术就可以判断用户输入的邮箱是否合法。
给大家推荐一本讲解正则表达式的书籍——《正则表达式必知必会》,感兴趣的同学可以网上寻找电子版或者购买纸质版。必知必会系列的还有《MySql必知必会》等
每日分享day07-数组为何从0开始编号
河北大学暑期程序设计训练每日知识分享-day07
每日分享——数组为何从0开始编号为什么大多数编程语言中,数组要从 0 开始编号,而不是从 1 开始呢?从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。如果用 a 来表示数组的首地址,a[0]就是偏移为 0 的位置,也就是首地址,a[k]就表示偏移 k 个 type_size 的位置,所以计算 a[k]的内存地址只需要用这个公式:a[k]_address = base_address + k * type_size但是,如果数组从 1 开始计数,那我们计算数组元素 a[k]的内存地址就会变为:a[k]_address = base_address + (k-1) * type_size 对比两个公式,我们不难发现,从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。C 语言设计者用 ...
每日分享day06-编程之美
河北大学暑期程序设计训练每日知识分享-day06
每日分享——《编程之美》《编程之美》这本书收集了约60道算法和程序设计题目,这些题目大部分在近年的笔试、面试中出现过,或者是被微软员工热烈讨论过。作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。书中绝大部分题目都提供了详细的解说。 每道题目后面还有一至两道扩展问题,供读者进一步钻研。书中还讲述了面试的各种小故事,告诉读者微软需要什么样的技术人才,重视什么样的能力,如何甄别人才。回答读者关于IT业面试,招聘,职业发展的疑问。这本书的很多题目会出现在IT 行业的各种笔试、面试中,但这本书更深层的意义在于引导读者思考,和读者共享思考之乐,编程之美。
【2021暑期训练-1】7-8 PAT排名汇总
计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才,为企业选拔人才提供参考标准(网址http://www.patest.cn)。
每次考试会在若干个不同的考点同时举行,每个考点用局域网,产生本考点的成绩。考试结束后,各个考点的成绩将即刻汇总成一张总的排名表。
现在就请你写一个程序自动归并各个考点的成绩并生成总排名表。
输入格式:输入的第一行给出一个正整数N(≤100),代表考点总数。随后给出N个考点的成绩,格式为:首先一行给出正整数K(≤300),代表该考点的考生总数;随后K行,每行给出1个考生的信息,包括考号(由13位整数字组成)和得分(为[0,100]区间内的整数),中间用空格分隔。
输出格式:首先在第一行里输出考生总数。随后输出汇总的排名表,每个考生的信息占一行,顺序为:考号、最终排名、考点编号、在该考点的排名。其中考点按输入给出的顺序从1到N编号。考生的输出须按最终排名的非递减顺序输出,获得相同分数的考生应有相同名次,并按考号的递增 ...
【2021暑期训练-1】7-7 模拟EXCEL排序
Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。
输入格式:输入的第一行包含两个正整数N(≤105) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。
输出格式:在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
输入样例:12343 1000007 James 85000010 Amy 90000001 Zoe 60
输出样例:123000001 Zoe 60000007 James 85000010 Amy 90
思路定义sort的排序函数,对结构体排序
代码1234567891011121314151617181920212223242526272829303132333435363738394041#include<io ...
【2021暑期训练-1】7-5 单词加密解析
输入一个英文单词(由六个小写英文字母组成),按照下列过程将该单词加密:先将英文单词中的小写字母转换为对应的大写字母,再将该大写字母的ASCII码对10整除后取其余数,从而得到一个六位整数密码。
输入格式:输入在一行中给出1个由六个小写英文字母组成的英文单词。
输出格式:按照规则转换成一个六位整数密码,并输出转换的过程。
输入样例:1friday
输出样例:123456f->F->0r->R->2i->I->3d->D->8a->A->5y->Y->9
思路在ASCII代码表中每一个大写字母比它相应的小写字母的ASCII码小32
ASCII范围:a-z:97-122 A-Z:65-90
代码1234567891011#include<iostream>#include<cstring>using namespace std;int main(){ string s; cin>>s; for(int i=0;i<s.size();i++) ...






