![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
冲刺2020蓝桥杯C++A组
备战2020蓝桥杯,力挽狂澜
赴星辰大海
这个作者很懒,什么都没留下…
展开
-
C++聪明的燕姿(数论、算术基本定理、素数筛)
城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于 S。所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)。可是她忙着唱《绿光》,想拜托你写一个程序能够快速地找到所有自己等的人。输入格式输入包含 k组数据。对于每组数据,输入包含一个号码牌 S。输出格式对于每组数据,输出有两行。原创 2020-10-10 22:47:55 · 499 阅读 · 0 评论 -
C++五指山(数论、扩展欧几里得辗转相除)
大圣在佛祖的手掌中。我们假设佛祖的手掌是一个圆圈,圆圈的长为 n,逆时针记为:0,1,2,…,n−1,而大圣每次飞的距离为 d。现在大圣所在的位置记为 x,而大圣想去的地方在 y。要你告诉大圣至少要飞多少次才能到达目的地。注意:孙悟空的筋斗云只沿着逆时针方向翻。输入格式有多组测试数据。第一行是一个正整数 T,表示测试数据的组数;每组测试数据包括一行,四个非负整数,分别为如来手掌圆圈的长度 n,筋斗所能飞的距离 d,大圣的初始位置 x 和大圣想去的地方 y。输出格式对于每组测试数据,输出一行,给原创 2020-10-10 00:33:09 · 292 阅读 · 0 评论 -
C++X的因子链(数论、素数筛法、混合排列)
输入正整数 X,求 X 的大于 1的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。输入格式输入包含多组数据,每组数据占一行,包含一个正整数表示 X。输出格式对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。每个结果占一行。数据范围1≤X≤220输入样例:23410100输出样例:1 11 12 12 24 6想要因子链最长,且前一项是后一项倍数,先只考虑第一个要求,想要因子链最长,倍数尽量取小就行,倍数取质因子原创 2020-10-10 00:24:33 · 531 阅读 · 0 评论 -
C++等差数列(数论、欧几里得辗转相除gcd)
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N个整数。现在给出这 N个整数,小明想知道包含这 N个整数的最短的等差数列有几项?输入格式输入的第一行包含一个整数 N。第二行包含 N个整数 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN并不一定是按等差数列中的顺序给出)输出格式输出一个整数表示答案。数据范围2≤N≤100000,0≤Ai≤109输入样例:52 6 4 10 20输出样例:10样例解释包含 2、6、4、10、20的最短的原创 2020-10-10 00:00:34 · 1340 阅读 · 0 评论 -
C++油漆面积(线段树、懒值标记)
X星球的一批考古机器人正在一片废墟上考古。该区域的地面坚硬如石、平整如镜。管理人员为方便,建立了标准的直角坐标系。每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。经过各种测量,每个机器人都会报告一个或多个矩形区域,作为优先考古的区域。矩形的表示格式为 (x1,y1,x2,y2),代表矩形的两个对角点坐标。为了醒目,总部要求对所有机器人选中的矩形区域涂黄色油漆。小明并不需要当油漆工,只是他需要计算一下,一共要耗费多少油漆。其实这也不难,只要算出所有矩形覆盖的区域一共有多大面积就可以原创 2020-10-06 18:31:06 · 494 阅读 · 0 评论 -
C++小朋友排队(树状数组)
n个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是 0。如果某个小朋友第一次被要求交换,则他的不高兴程度增加 1,如果第二次要求他交换,则他的不高兴程度增加 2(即不高兴程度为 3),依次类推。当要求某个小朋友第 k 次交换时,他的不高兴程度增加 k。请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。输入格式输入的原创 2020-10-04 23:07:08 · 1060 阅读 · 0 评论 -
C++数列区间最大值(线段树)
输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y,要求你说出 X 到 Y这段区间内的最大数。输入格式第一行两个整数 N,M表示数字的个数和要询问的次数;接下来一行为 N个数;接下来 M行,每行都有两个整数 X,Y。输出格式输出共 M行,每行输出一个数。数据范围1≤N≤105,1≤M≤106,1≤X≤Y≤N,数列中的数字均不超过231−1输入样例:10 23 2 4 5 6 8 1 2 9 71 43 8输出样例:58线段树叶子节点是元素值,一个父节点不超过两个原创 2020-10-04 21:28:31 · 2188 阅读 · 0 评论 -
C++数星星(树状数组)
天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标。如果一个星星的左下方(包含正左和正下)有 k颗星星,就说这颗星星是 k级的。例如,上图中星星 是 3 级的(1,2,4 在它左下),星星 2,4 是 1级的。例图中有 1个 0 级,2 个 1 级,1 个 2 级,1 个 3级的星星。给定星星的位置,输出各级星星的数目。换句话说,给定 N个点,定义每个点的等级是在该点左下方(含正左、正下)的点的数目,试统计每个等级有多少个点。输入格式第一行一个整数 N,表示星星的数目;接下来 N行给原创 2020-10-04 20:42:29 · 1551 阅读 · 0 评论 -
C++动态求连续区间和(线段树)
给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b]的连续和。输入格式第一行包含两个整数 n和 m,分别表示数的个数和操作次数。第二行包含 n个整数,表示完整数列。接下来 m行,每行包含三个整数 k,a,b (k=0,表示求子数列[a,b]和;k=1,表示第 a 个数加 b)。数列从 1开始计数。输出格式输出若干行数字,表示 k=0时,对应的子数列 [a,b]的连续和。数据范围1≤n≤100000,1≤m≤100000,1≤a≤b≤n输入样例:10原创 2020-10-04 00:34:18 · 572 阅读 · 0 评论 -
C++动态求连续区间和(树状数组)
给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b]的连续和。输入格式第一行包含两个整数 n和 m,分别表示数的个数和操作次数。第二行包含 n个整数,表示完整数列。接下来 m行,每行包含三个整数 k,a,b (k=0,表示求子数列[a,b]和;k=1,表示第 a 个数加 b)。数列从 1开始计数。输出格式输出若干行数字,表示 k=0时,对应的子数列 [a,b]的连续和。数据范围1≤n≤100000,1≤m≤100000,1≤a≤b≤n输入样例:10原创 2020-10-03 22:27:45 · 434 阅读 · 0 评论 -
C++带分数(递归,枚举,嵌套深搜)
100 可以表示为带分数的形式:100=3+69258/714还可以表示为:100=82+3546/197注意特征:带分数中,数字 1∼9分别出现且只出现一次(不包含 0)。类似这样的带分数,100有 11种表示法。输入格式一个正整数。输出格式输出输入数字用数码 1∼9不重复不遗漏地组成带分数表示的全部种数。数据范围1≤N<106输入样例1:100输出样例1:11输入样例2:105输出样例2:6#include<iostream>#include&原创 2020-10-02 00:02:51 · 489 阅读 · 0 评论 -
C++飞行员兄弟(枚举)
“飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱。已知每个把手可以处于以下两种状态之一:打开或关闭。只有当所有把手都打开时,冰箱才会打开。把手可以表示为一个4х4的矩阵,您可以改变任何一个位置[i,j]上把手的状态。但是,这也会使得第i行和第j列上的所有把手的状态也随着改变。请你求出打开冰箱所需的切换把手的次数最小值是多少。输入格式输入一共包含四行,每行包含四个把手的初始状态。符号“+”表示把手处于闭合状态,而符号“-”表示把手处于打开状态。至少一个手柄的初始状态是关闭的原创 2020-10-01 21:06:31 · 1010 阅读 · 0 评论 -
C++外卖店优先级(模拟)
“饱了么”外卖系统中维护着 N 家外卖店,编号 1∼N。每家外卖店都有一个优先级,初始时 (0时刻) 优先级都为 0。每经过 1个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果优先级小于等于 3,则会被清除出优先缓存。给定 T时刻以内的 M 条订单信息,请你计算 T时刻时有多少外卖店在优先缓存中。输入格式第一行包含 3个整数 N,M,T。以下 M行每原创 2020-09-30 23:28:28 · 501 阅读 · 0 评论 -
C++逆序对的数量(归并排序)
给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤100000输入样例:62 3 4 5 6 1输出样例:5归并排序是求逆序对的利器,利用排序带来的单调性一次求一把逆序对。AC代码:#inc原创 2020-09-30 23:18:04 · 1065 阅读 · 0 评论 -
C++航班时间(时间换算、模拟、sscanf输入控制)
小 h前往美国参加了蓝桥杯国际赛。小 h的女朋友发现小 h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。小 h对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有 12小时时差,故飞机总共需要 14小时的飞行时间。不久后小 h的女朋友去中东交换。小 h并不知道中东与北京的时差。但是小 h得到了女朋友来回航班的起降时间。小 h想知道女朋友的航班飞行时间是多少。对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,原创 2020-09-30 23:14:22 · 678 阅读 · 0 评论 -
C++移动距离(模拟、枚举)
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3…当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为 6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 15 …我们的问题是:已知了两个楼号 m和 n,需要求出它们之间的最短移动距离(不能斜线方向移动)。输入格式输入共一行,包含三个整数 w,m,n,w 为排号宽度,m,n为待计算的楼号。输出格式输出一个整数,表示 m,n两楼间最短移动距离。数原创 2020-09-30 23:03:29 · 264 阅读 · 0 评论 -
C++归并排序
AC代码:#include<stdio.h>int n;int a[100010];//目标数组,源数组int b[100010];//道具数组void merge_sort(int l,int r){ if(l==r) return; int mid=l+((r-l)>>1); merge_sort(l,mid); merge_sort(mid+1,r); for(int i=l;i<=r;++i) b[i]=a[i原创 2020-09-30 22:58:59 · 92 阅读 · 0 评论 -
C++回文日期(枚举、日期合法判断)
在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现在,牛牛想知道:在他指定的两个日期之间(包含这两个日期本身),有多少个真实存在的日期是回文的。一个 8 位数字是回文的,当且仅当对于所有的 i(1≤i≤8) 从左向右数的第i个数字和第 9原创 2020-09-30 22:56:06 · 3402 阅读 · 0 评论 -
C++日期问题(枚举、日期合法判断、printf格式控制)
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?输入格式一个日期,原创 2020-09-30 13:50:09 · 803 阅读 · 0 评论 -
C++错误票据(排序,输入控制)
某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。输入格式第一行包含整数 N,表示后面共有 N行数据。接下来 N行,每行包含空格分开的若干个(不大于100个)正整数(不大于100000),每个整数代表一个ID号。输出格式要求程序输出1行,含两原创 2020-09-29 00:26:31 · 289 阅读 · 0 评论 -
C++特别数的和(枚举)
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。请问,在 1到 n中,所有这样的数的和是多少?输入格式共一行,包含一个整数 n。输出格式共一行,包含一个整数,表示满足条件的数的和。数据范围1≤n≤10000输入样例:40输出样例:574由于本题数据范围非常小,进行常规的枚举和拆分数字就行了。AC代码:#include<iostream>原创 2020-09-28 18:30:33 · 554 阅读 · 0 评论 -
C++递增三元组(枚举、前缀和)
给定三个整数数组A=[A1,A2,…AN],B=[B1,B2,…BN],C=[C1,C2,…CN],请你统计有多少个三元组 (i,j,k)满足:1≤i,j,k≤NAi<Bj<Ck输入格式第一行包含一个整数 N。第二行包含 N个整数 A1,A2,…AN。第三行包含 N个整数 B1,B2,…BN。第四行包含 N个整数 C1,C2,…CN。输出格式一个整数表示答案。数据范围1≤N≤105,0≤Ai,Bi,Ci≤105输入样例:31 1 12 2 23 3 3输出样原创 2020-09-28 18:06:29 · 476 阅读 · 0 评论 -
C++连号区间数(枚举)
小明这些天一直在思考这样一个奇怪而有趣的问题:在 1∼N的某个排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间 [L,R]里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1的“连续”数列,则称这个区间连号区间。当 N很小的时候,小明可以很快地算出答案,但是当 N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。输入格式第一行是一个正整数 N,表示排列的规模。第二行是 N个不同的数字 Pi,表示这 N个数字的某一排列。输出格式输出一原创 2020-09-28 17:01:29 · 879 阅读 · 1 评论 -
C++波动数列(动态规划)
观察这个数列:1 3 0 2 -1 1 -2 …这个数列中后一项总是比前一项增加2或者减少3,且每一项都为整数。栋栋对这种数列很好奇,他想知道长度为 n和为 s 而且后一项总是比前一项增加 a 或者减少 b的整数数列可能有多少种呢?输入格式共一行,包含四个整数 n,s,a,b,含义如前面所述。输出格式共一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以 100000007的余数。数据范围1≤n≤1000,−109≤s≤109,1≤a,b≤106输入样例:4 1原创 2020-09-28 16:29:49 · 521 阅读 · 0 评论 -
C++地宫取宝(动态规划)
X 国王有一个地宫宝库,是 n×m个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签。地宫的入口在左上角,出口在右下角。小明被带到地宫的入口,国王要求他只能向右或向下行走。走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。当小明走到出口时,如果他手中的宝贝恰好是 k件,则这些宝贝就可以送给小明。请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这 k件宝贝。输入格式第一行 3个整数,n,m,k,含义见题目描述。接下来原创 2020-09-27 23:05:56 · 588 阅读 · 3 评论 -
C++最长上升子序列(动态规划)
AC代码:#include<stdio.h>#include<algorithm>using namespace std;int n;int a[1010];//数据数组int f[1010];//递推数组int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&a[i]); } //求以a[i]结尾的最长上升子序列原创 2020-09-27 21:21:13 · 1019 阅读 · 0 评论 -
C++摘花生(动态规划)
Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。输入格式第一行是一个整数T,代表一共有多少组数据。接下来是T组数据。每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。每组数据的接下来R行数据,从北原创 2020-09-27 20:10:13 · 3017 阅读 · 2 评论 -
C++01背包问题(动态规划)
有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22 43原创 2020-09-27 11:34:27 · 1272 阅读 · 0 评论 -
C++饮料换购(数学)
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n瓶饮料,最后他一共能喝到多少瓶饮料。输入格式输入一个整数 n,表示初始买入的饮料数量。输出格式输出一个整数,表示一共能够喝到的饮料数量。数据范围0<n<10000输入样例:100输出样例:149本题关键要想明白换来的饮料还可以变成瓶盖,继续拿去换饮料。AC代码:#i原创 2020-09-26 23:32:50 · 1084 阅读 · 0 评论 -
C++蚂蚁感冒(数学)
长 100 厘米的细长直杆子上有 n只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是 1厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有 1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。输入格式第一行输入一个整数 n, 表示蚂蚁的总数。接着的一行是 n个用空格分开的整数 Xi, Xi的绝对值表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出原创 2020-09-26 23:11:57 · 362 阅读 · 0 评论 -
C++买不到的数目(数学定理)
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。输入格式两个正整数 n,m,表示每种包装中糖的颗数。输出格式一个正整数,表示最大不能买到的糖数。数据范围2≤n,m≤1000,保原创 2020-09-26 22:30:49 · 456 阅读 · 0 评论 -
C++k倍区间(前缀和)
给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K倍区间。你能求出数列中总共有多少个 K倍区间吗?输入格式第一行包含两个整数 N和 K。以下 N行每行包含一个整数 Ai。输出格式输出一个整数,代表 K倍区间的数目。数据范围1≤N,K≤100000,1≤Ai≤100000输入样例:5 212345输出样例:6AC代码:#include<stdio.h>i原创 2020-09-26 21:53:24 · 1148 阅读 · 0 评论 -
C++激光炸弹(二维前缀和)
地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。注意:不同目标可能在同一位置。现在有一种新型的激光炸弹,可以摧毁一个包含 R×R个位置的正方形内的所有目标。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和x,y轴平行。若目标位于爆破正方形的边上, 该目标不会被摧毁。求一颗炸弹最多能炸掉地图上总价值为多少的目标。输入格式第一行输入正整数 N和 R,分别代表地图上的目标数目和正方形的边长,数据用空格隔开。接下来N行,每原创 2020-09-26 19:16:43 · 772 阅读 · 0 评论 -
C++四平方和(二分搜索)左开右开写法必须记录答案!
四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 4个正整数的平方和。如果把 0包括进去,就正好可以表示为 4个数的平方和。比如:5=0^2+0^2+1^2+2^27=1^2+1^2+1^2+2^2对于一个给定的正整数,可能存在多种平方和的表示法。要求你对 4个数排序:0≤a≤b≤c≤d并对所有的可能表示法按 a,b,c,d为联合主键升序排列,最后输出第一个表示法。输入格式输入一个正整数 N。输出格式输出4个非负整数,按从小到大排序,中间用空原创 2020-09-26 17:32:03 · 282 阅读 · 0 评论 -
C++机器人跳跃问题(二分搜索)
机器人正在玩一个古老的基于DOS的游戏。游戏中有N+1座建筑——从0到N编号,从左到右排列。编号为0的建筑高度为0个单位,编号为 i 的建筑高度为H(i)个单位。起初,机器人在编号为0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能量值是E,下一步它将跳到第k+1个建筑。如果H(k+1)>E,那么机器人就失去H(k+1)-E的能量值,否则它将得到E-H(k+1)的能量值。游戏目标是到达第N个建筑,在这个过程中能量值不能为负数个单位。现在的问题是机器人至少原创 2020-09-26 00:55:24 · 1330 阅读 · 0 评论 -
C++分巧克力(二分搜索)
儿童节那天有 K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 N块巧克力,其中第 i 块是 Hi×Wi的方格组成的长方形。为了公平起见,小明需要从这 N块巧克力中切出 K块巧克力分给小朋友们。切出的巧克力需要满足:形状是正方形,边长是整数大小相同例如一块 6×5的巧克力可以切出 6 块 2×2 的巧克力或者 2 块 3×3的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?输入格式第一行包含两个整数 N和 K。以下 N行每行包含两原创 2020-09-24 22:38:53 · 469 阅读 · 0 评论 -
C++翻硬币(递推)
小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做一步操作。输入格式两行等长的字符串,分别表示初始状态和要达到的目标状态。输出格式一个整数,表示最原创 2020-09-24 21:54:41 · 1143 阅读 · 0 评论 -
C++求子矩阵的和(二维前缀和)
输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。输出格式共q行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q≤200000,1≤x1≤x2≤n,1≤y1≤y2≤m,−1000≤矩阵内元素的值≤100原创 2020-09-24 21:14:03 · 1204 阅读 · 1 评论 -
C++求数的三次方根(二分)
给定一个浮点数n,求它的三次方根。输入格式共一行,包含一个浮点数n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。数据范围−10000≤n≤10000输入样例:1000.00输出样例:10.000000AC代码:#include<stdio.h>double n;double ans;double figure(double x){ return x*x*x;}int main(){ scanf("%lf",&原创 2020-09-24 20:35:10 · 4028 阅读 · 0 评论 -
C++数的范围(二分查找)
给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。数据范围1≤n≤1000001≤原创 2020-09-24 11:54:51 · 901 阅读 · 0 评论