发布时间:2024-04-22 18:01
枚举
14
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。
他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。
请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数a, b 和n.
50% 的评测用例:1 ≤ a, b, n ≤ 10^6;
100% 的评测用例:1 ≤ a, b, n ≤ 10^18。
输出一个整数代表天数。
10 20 99
8
#include
using namespace std;
int main()
{
long long a,b,n,m;
cin>>a>>b>>n;
long long weekend=5*a+2*b,week=5*a;
if(n%weekend>week)m=(n/weekend)*7+5+(n%weekend-5*a)/b+((n%weekend-5*a)%b>0);
else m=(n/weekend)*7+(n%weekend/a)+(n%weekend>0);
cout<<m<<endl;
return 0;
}
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。
爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。
爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。
当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。
直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。
在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
一个正整数N ,含义如题面所述。 输出 N 行,每行一个整数,第 i 行表示从左到右第 i 棵树最高能长到多高。 3 4 画图打表 找规律 发现与树的坐标和最右的坐标的距离有关,且具有对称性 进制规定了数字在数位上逢几进一。 第一行一个正整数 N,含义如题面所述。 输出一行一个整数,表示X 进制数A − B 的结果的最小可能值转换为十进制后再模1000000007 的结果。 11 94 当进制为:最低位 2 进制,第二数位 5 进制,第三数位 11 进制时,减法得到的差最小。 给定一个 N × M 的矩阵A,请你统计有多少个子矩阵(最小 1 × 1,最大 N × M) 满足: 一个整数代表答案。 3 4 10 19 满足条件的子矩阵一共有19,包含: 用双指针枚举矩阵中的左右边界,在每一个左右边界中,从上到下求子段中和小于等于k得数量 小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型(大小为 3 个单位面积): 同时,小明有一块面积大小为 2 × N 的画布,画布由 2 × N 个 1 × 1 区域构成。 输入一个整数N,表示画布大小。 输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取模后的值 3 5 状压dp 小明最近迷上了一款名为《扫雷》的游戏。 输入的第一行包含两个整数n、m. 输出一个整数表示答案。 2 1 2 示例图如下,排雷火箭1 覆盖了炸雷1,所以炸雷1 被排除;炸雷1 又覆盖了炸雷2,所以炸雷2 也被排除。 哈希 话说大诗人李白,一生好饮。幸好他从不开车。 输入包含多组测试数据。 输出一个整数表示答案。由于答案可能很大,输出模1000000007 的结果。 1 14 如果我们用 0 代表遇到花,1 代表遇到店,14 种顺序如下: 动态规划dp 这天,小明在砍竹子,他面前有 n 棵竹子排成一排,一开始第 i 棵竹子的高度为 hi. 其中 ⌊x⌋ 表示对 x 向下取整。 一个整数表示答案。 6 5 其中一种方案: 分析:先来说一个贪心策略,我们优先选择砍所剩竹子中高度最大的竹子,因为无论我们怎么砍高度低的竹子都不可能使得高度低的竹子高度变高,从而能够和高度高的竹子一块被砍,相反的,我们砍完高度高的竹子后由于高度变低,所以可能会跟原来高度低的竹子一块被砍,所以这种贪心策略显然是正确的。而且高度相同的连续竹子一定要放在一起砍,这是显然的,一次可以砍完的事情为什么非要分几次呢?有了这个策略我们再来看一下一棵竹子最多会被砍多少次,你可以先按竹子高度最高1e18来算,发现他经过6次就可以砍成高度为1的竹子,也就是说每棵竹子被砍的次数都不会超过6. 那我们可以开一个优先队列,里面存pair类型,第一维是竹子的高度,第二维是竹子的编号,那么我们先把所有的竹子放入优先队列,每次取出一棵竹子,并记录其编号,直到取到一棵竹子高度不等于前一棵竹子的高度或者编号与前一棵竹子编号不是相连的,这个时候就将砍的次数+1.注意由于高度是从高到低排的,我没有用结构体排序,所以pair两维都是按照从高到低的规则来进行排序的,所以先出队列的就是编号较大的,只需要进行一下判断高度是否相等以及编号是否连续即可。还有一点需要注意的就是,我们每次取出队头竹子,然后把这个竹子的高度和编号记录一下,用于判断后续竹子是否可以和当前竹子一块被砍,然后就可以直接把当前竹子砍掉并讲砍完后的高度连同其编号一同放入优先队列(前提是竹子被砍后高度不为1),直至队空为止。 最后分析一下复杂度:每棵竹子最多进6次队列,共有n棵竹子,由于队列中最多同时有n棵竹子,所以每次入队都是o(logn)的,所以说总的复杂度就是6nlogn,是可以通过所有数据的。 也可以用结构体写堆(优先队列) 用结构体写的优先队列 堆 用pair写的堆
30%的测试数据:1输出格式
输入样例
输出样例
2
4
#include
E.X进制减法
题目描述
X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!
例如说某种X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制:
则 X 进制数321 转换为十进制数为65。65=3*(210)+2(2)+1*(1)。
现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确定。
只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进制。
请你算出 A − B 的结果最小可能是多少。
请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。输入格式
第二行一个正整数 Ma,表示 X 进制数 A 的位数。
第三行 Ma 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各个数位上的数字在十进制下的表示。
第四行一个正整数 Mb,表示 X 进制数 B 的位数。
第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各个数位上的数字在十进制下的表示。
请注意,输入中的所有数字都是十进制的。
30%的测试数据:2≤N≤10,1≤Ma,Mb≤8。
100%的测试数据:2≤N≤1000,1≤Ma,Mb≤100000,B≤A。输出格式
输入样例
3
10 4 0
3
1 2 0输出样例
数据范围与提示
此时A 在十进制下是108,B 在十进制下是 14,差值是 94。#include
F.统计子矩阵题目描述
子矩阵中所有数的和不超过给定的整数K?
输入格式
第一行包含三个整数N, M 和K.
之后 N 行每行包含 M 个整数,代表矩阵A.
30%的测试数据:1≤N,M≤20;
70%的测试数据:1≤N,M≤100;
100%的测试数据:1≤N,M≤500;0≤Aij≤1000;1≤K≤250000000。输出格式
输入样例
1 2 3 4
5 6 7 8
9 10 11 12输出样例
数据范围与提示
大小为1 × 1 的有10 个。
大小为1 × 2 的有3 个。
大小为1 × 3 的有2 个。
大小为1 × 4 的有1 个。
大小为2 × 1 的有3 个。
#include
G.积木画
题目描述
小明需要用以上两种积木将画布拼满,他想知道总共有多少种不同的方式?
积木可以任意旋转,且画布的方向固定。输入格式
对于所有测试用例,1 ≤ N ≤ 10000000。输出格式
输入样例
输出样例
#include
H.扫雷
题目描述
其中有一个关卡的任务如下,在一个二维平面上放置着 n 个炸雷
第 i 个炸雷(xi, yi, ri) 表示在坐标(xi, yi) 处存在一个炸雷,它的爆炸范围是以半径为 ri 的一个圆。
为了顺利通过这片土地,需要玩家进行排雷。
玩家可以发射 m 个排雷火箭,小明已经规划好了每个排雷火箭的发射方向。
第 j 个排雷火箭(xj, yj, rj) 表示这个排雷火箭将会在(xj, yj) 处爆炸,它的爆炸范围是以半径为 rj 的一个圆,
在其爆炸范围内的炸雷会被引爆。同时,当炸雷被引爆时,在其爆炸范围内的炸雷也会被引爆。
现在小明想知道他这次共引爆了几颗炸雷?
你可以把炸雷和排雷火箭都视为平面上的一个点。
一个点处可以存在多个炸雷和排雷火箭。当炸雷位于爆炸范围的边界上时也会被引爆。输入格式
接下来的 n 行,每行三个整数xi, yi, ri,表示一个炸雷的信息。
再接下来的 m 行,每行三个整数xj, yj, rj,表示一个排雷火箭的信息。
40% 的评测用例:0 ≤ x, y ≤ 10^9; 0 ≤ n,m ≤ 10^3; 1 ≤ r ≤ 10:
100% 的评测用例:0 ≤ x, y ≤ 10^9; 0 ≤ n,m ≤ 5 × 10^4; 1 ≤ r ≤ 10:输出格式
输入样例
2 2 4
4 4 2
0 0 5输出样例
数据范围与提示
#include
I.李白打酒加强版
题目描述
一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店 N 次,遇到花 M 次。
已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白这一路遇到店和花的顺序,有多少种不同的可能?
注意:壶里没酒( 0 斗) 时遇店是合法的,加倍后还是没酒;但是没酒时遇花是不合法的。输入格式
第一行为T,表示存在T组测试数据,T不超过30。
对于每组测试数据,输入两个整数N 和M.
1 ≤ N, M ≤ 100。输出格式
输入样例
5 10输出样例
数据范围与提示
010101101000000
010110010010000
011000110010000
100010110010000
011001000110000
100011000110000
100100010110000
010110100000100
011001001000100
100011001000100
100100011000100
011010000010100
100100100010100
101000001010100
memset(&dp[0][0][0],0,sizeof(dp));//清空多维数组#include
J.砍竹子
题目描述
他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。
魔法可以对连续的一段相同高度的竹子使用,假设这一段竹子的高度为H,
那么使用一次魔法可以把这一段竹子的高度都变为:
小明想知道他最少使用多少次魔法可以让所有的竹子的高度都变为1。
输入格式
第一行为一个正整数 n,表示竹子的棵数。
第二行共 n 个空格分开的正整数 hi,表示每棵竹子的高度。
20%的测试数据:n ≤ 1000; hi ≤ 10^6。
100%的测试数据:n ≤ 2 × 10^5; hi ≤ 10^18。输出格式
输入样例
2 1 4 2 6 7输出样例
数据范围与提示
2 1 4 2 6 7
→ 2 1 4 2 6 2
→ 2 1 4 2 2 2
→ 2 1 1 2 2 2
→ 1 1 1 2 2 2
→ 1 1 1 1 1 1
共需要 5 步完成。
#include
#include
struct node
{
ll h;
int num;
bool operator<(const node &a)const
{
if(h==a.h)return num>a.num;
return h<a.h;
}
};
priority_queue<node>q;
q.pop();
q.push((node){sqrt(t/2+1),n});
typedef pair<long long,int>PII;
priority_queue<PII>q;
q.push({t,i});
q.pop();