- 博客(24)
- 收藏
- 关注
原创 Plus and Multiply(思维)
有一个无穷的集合, 初始集合内有整数1, 现给定你整数a和b.集合内部元素有如下定义: 若x存在于集合中, 则x * a存在于集合中, x + b也存在于集合当中.请你判断整数n是否存在于集合中.
2022-07-07 18:08:35
286
原创 Helping the Nature(思维,差分,构造)
给你一个长度为 n 的序列 a,每次可以进行一下三种操作的任意一种求将序列a中的每个元素变为1的最小操作次数。通过操作1和操作2我们可知它是对序列的左右区间是有影响的,而操作3是对整个序列是有影响的。并且我们发现当序列是单调递增的时候,我们可以很容易的求出来操作次数。例如: 5 5 6 8 9 将此序列全部变成0的最小操作次数为9次,即只选择操作二即可,选择的下标为 :1,1,1,1,1,3,4,4,5。所以我们很容易发现当序列是单调递增且a1≥0的时候,操作次数为an......
2022-07-07 16:21:55
415
2
原创 Divisibility by Eight(数学题)
给你一个不包含前导0的整数,位数100位,问是否可以在通过删除一些位数,且不能改变原有位置的情况下整除8?
2022-07-07 10:34:57
193
原创 Number of Ways(思维,前缀和)
给你一个长度为n的数组,将其分成三个连续的区间,且每个区间的总和相等,问一共有多少种分法?首先,对原数组求一边前缀和 (s[ ] 表示前缀和数组),看 s[n]%3是不是等于0,若不等于0,直接输出0即可,否则,遍历一遍前缀和数组,用一个变量 cnt 来记录在这之前一共有多少个位置的前缀和 = s[n] / 3 ,如果当前位置s[i] = s[n] / 3 * 2,则答案加上cnt即可。...
2022-07-07 10:07:18
212
原创 四舍五入(模拟)
题目链接:link题目大意:四舍五入是个好东西。比如你只考了45分,四舍五入后你是50分再四舍五入你就是满分啦!qdgg刚考完拓扑。成绩十分不理想。但老师觉得他每天都很认真的听课很不容易。于是决定给他一个提高成绩的机会:让他的成绩可以在小数点后的任意位置四舍五入(也可以四舍五入为最接近的整数)。但是这是有限制的。qdgg只能四舍五入t次。请帮助qdgg找到他在不超过t次四舍五入可获得的最高成绩。请注意,他可以选择不使用全部t次机会。此外,他甚至可以选择完全不对成绩进行四舍五入。在这个问题中,使用经典
2022-01-19 13:28:57
548
原创 Fraction Floor Sum(数论分块)
题目链接:link题目大意:给你一个正整数NNN,求解∑i=1N[Ni]\sum\limits_{i=1}^N[\frac{N} {i}]i=1∑N[iN]。解题思路:根据结论可知 [Ni][\frac{N} {i}][iN] 最多有 2N2\sqrt{N}2N 个不同的值,证明如下:当 1≤i≤N1≤i≤\sqrt{N}1≤i≤N时,因为 iii 有N\sqrt{N}N种,所以[Ni][\frac{N} {i}][iN]最多也有N\sqrt{N}N种。当N≤i≤N\sqrt{
2022-01-14 18:27:53
479
1
原创 AtCoder Beginner Contest 230_D(贪心)
题目链接:link题目大意:给你 nnn 堵墙,每堵墙所处的位置为 [Li,Ri][ L_i , R_i ][Li,Ri],每次操作可以将连续的DDD个位置的墙壁击碎,问将所有的墙壁击碎所需要的最小操作次数。解题思路:从贪心的角度来思考,每次操作我们都选择从墙壁的最右端开始往后连续DDD个位置开始击打,这样有利于我们可以击打到后面的墙壁。我们对右端点贪,所以我们就将墙壁按照右端点进行升序排序,从前往后依次枚举。1)如果当前墙壁的左端点在上次击打的范围内则 continue。2)如果当前墙壁的
2022-01-14 12:01:36
311
原创 木棍游戏(二进制枚举)
题目链接:link题目大意:给出 n 根长度不一的木棍,第 i 根棍子长度为 aia_iai 。两根长度分别为 ab和aca_b 和 a_cab和ac的木棍可以拼接成一根长度为 ab+aca_b+a_cab+ac 的木棍,同理 3 根,4 根,甚至 n 根都能拼接。问:使用这 n 根木棍作三角形的边(一根木棍至多使用一次,也可以不使用),能拼出的面积最大的三角形的面积。解题思路:通过数据范围可知 n 最大为 8 ,所以我们可以用二进制枚举来枚举每一条边是由那些木棍组成。复杂度O((1&l
2022-01-13 23:32:38
2792
原创 AtCoder Beginner Contest 225 E(贪心,思维)
题目链接:link题目大意:在二维坐标系的第一象限上给你 n 个 ‘ 7 ’,问通过删除一些 ‘ 7 ’后最多可以看见多少个 ‘ 7 ’。解题思路:分别将每个 ‘ 7 ’的两个端点与原点相连,这两条直线与X轴形成角的弧度值可以视为一个区间,这样问题就转换成了给你n个区间,问最多有多少个区间不相交。求区间不相交的个数: 对区间的右端点进行升序排序,然后从左往右贪心。注意: 弧度用 long double 存储可以避免精度问题,atan2(a,b)表示 斜率为(a / b)的直线与X轴形成角的弧度值
2022-01-12 10:47:37
317
原创 New Year‘s Problem(二分答案)
题目链接:link题目大意:Vlad 有 n 个朋友,要在 m 家商店中买一些商店送给他的朋友当做礼物(最多选n − 1 家商店),要求每个朋友都要收到礼物。在第 i 家商店给第 j 个朋友买礼物时,朋友获得的快乐值为 pi,jp_{i,j}pi,j 。设最终第 j 个朋友获得的快乐值为 aja_jaj,定义 ans=min(a1,a2,…,an)ans = min(a_1,a_2,…,a_n)ans=min(a1,a2,…,an),求 ans 的最大值。解题思路:首先,假设 ans 可以
2021-12-22 21:20:29
885
原创 P1637 三元上升子序列 (权值线段树+乘法原理)
题目链接:link题目大意:Erwin 最近对一种叫thair的东西巨感兴趣。在含有 n 个整数的序列a1,a2,…,ana_1,a_2,\ldots,a_na1,a2,…,an 中,三个数被称作thair当且仅当 i < j < k 且 ai<aj<aka_i<a_j<a_kai<aj<ak,求一个序列中 thair的个数。解题思路:对于三元组,首先应该想到枚举中间的元素 ,用L[ i ]记录a[ i ]左边小于a[ i ]的元素个数,用
2021-12-20 16:38:52
324
原创 P1276 校门外的树(增强版)(线段树)
题目链接:link题目大意:校门外马路上本来从编号 0 到 L,每一编号的位置都有一棵树。有砍树者每次从编号 A 到 B 处连续砍掉每一棵树,就连树苗也不放过(记 0 A B,含 A 和 B);幸运的是还有植树者每次从编号 C 到 D 中凡是空穴(树被砍且还没种上树苗或树苗又被砍掉)的地方都补种上树苗(记 1 C D,含 C 和 D);问最终校门外留下的树苗多少棵?植树者种上又被砍掉的树苗有多少棵?解题思路:对于第一问,留下的树苗数 = 留下的(树与树苗)总数 - 留下的(树)的总数。对于第二问,
2021-12-16 00:50:31
990
原创 P2023 [AHOI2009]维护序列(线段树)
题目链接:link题目大意:已知一个数列,你需要进行下面三种操作:将某区间每一个数乘上 x将某区间每一个数加上 x求出某区间每一个数的和第一行包含三个整数 n,m,p,分别表示该数列数字的个数、操作的总个数和模数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 m 行每行包含若干个整数,表示一个操作,具体如下:操作 1: 格式:1 x y k 含义:将区间 [x,y] 内每个数乘上 k操作 2: 格式:2 x y k 含义:将区间 [x,y]
2021-12-14 20:53:37
145
原创 Game Master(思维 + 贪心)
题目链接:Game Master题目大意:有n名玩家和两张地图,已知每名玩家在每张地图上的战斗力,一共进行n-1场比赛,每次比赛选择一张地图和两名玩家,战斗力强的玩家最终获胜,问每名玩家是否能赢得最终的比赛。解题思路:将n名玩家在第一张地图上的战斗力进行升序排序,可知最后一名玩家可以赢得比赛,然后进行倒序查找,判断当前玩家在第二张地图上的战斗力是否大于已知可以赢得比赛的所有玩家在第二张地图上战斗力的最小值,若大于,则该玩家及之后的所有玩家都可以赢得比赛,因为之后的玩家在第一张地图上的战斗力都比该玩家
2021-12-12 13:23:45
889
1
原创 Two Buttons(思维)
题目链接:Two Buttons题目大意:给你两个正整数 n 和 m。以下操作可以进行任意次操作一:n = n * 2操作二:n = n - 1问将n变成m的最小操作次数。解题思路:当 n ≥ m 时,毋庸置疑答案为n - m。当 n < m 时,分以下两种情况:m为偶数时,他一定是某个数一直执行操作一得到的,所以我们一直让m除以2,终止的条件为m%2 != 0或者m ≤ n,若m ≤ n答案为执行的次数+ (n - m),若最后m > n,那么答案为执行的次数+ n到新的m
2021-12-08 20:14:28
291
原创 货仓选址(前缀和 or 三分 or 中位数)
题目链接:货仓选址题目大意:在一条数轴上有 N 家商店,它们的坐标分别为 A1∼AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。解题思路:第一种(前缀和):根据题目数据可知货仓的位置范围为0 ~ 40000,所以我们想到可以用O(n)的复杂度从0 ~ 40000枚举每个位置,枚举每个位置的时候求出该位置到所有商店的距离之和,然后求一个最小值。关键在于如何用O(1)的复杂度更新货仓到所有商店的距
2021-12-08 13:52:22
479
原创 Circular Billiard Table(计算几何)
题目链接:Circular Billiard Table题目大意:从圆盘的边缘以某个角度发射一颗小球,小球在圆盘内部沿反射定律运动,问第一次回到原点之前一共碰撞了多少次。解题思路:由反射定律可知小球每两次反射之间的圆心角是相同的,不妨设为 α。若小球反射 n 次后回到原点,则 nα = k · 360°(k 为某个自然数)。换言之,最小的 n 即为最小的 n 使得 360|nα,利用 gcd 算一下即可。AC代码:#include<bits/stdc++.h>using na
2021-11-25 00:57:04
649
原创 Desserts(组合数学 + 思维)
题目链接:Desserts题目大意:有 n 种糖果,第 i 种糖果共有 ai 个,问把所有糖果分给 k 支队伍,使得每支队伍不会拥有相同类型糖果的方案数。保证 ∑ai\sum ai∑ai ≤ 105\ 10^5 105。解题思路:首先,考虑暴力做法,对于第 i 种糖果分给 k 支队伍的方法有 CkaiC_{k}^{ai}Ckai 种, 则ans = ∏i=1nCkai\prod_{i=1}^n{C_{k}^{ai}}∏i=1nCkai。可以看出这样复杂度为O(nm),会超
2021-11-25 00:15:08
432
原创 Period(Hash + 前缀和)
题目链接:Period题目大意:给定一个只包含小写字母的字符串,每次询问将某个位置修改为 #,问周期数量(修改独立)。解题思路:前置知识: 字符串的Period(周期),Border对字符串 s 和 0 < p < |s|,若 s[ i ] = s[ i + p ] 对所有 i ∈ [ 1, |s| - p ] 成立,则称 p 是 s 的周期。对字符串 s 和 0 < r < |s|,若 s 长度为 r 的前缀和长度为 r 的后缀相等,就称 s 长度为 r 的前缀是
2021-11-24 22:09:45
305
原创 Goodbye, Ziyin(概念题)
题目链接:Goodbye, Ziyin!题目大意:给出一颗无根树,询问有多少个节点以它为根时是棵二叉树。解题思路:如果一棵树是二叉树,那么应该满足以下条件:根节点最多有两个儿子 => 根节点的度 < 3.非根节点最多有两个儿子 => 非根节点的度 ≤ 3.所以,先判断一下是否有度>3的节点,若有答案为0,否则,答案为节点的个数 - 度等于3的节点个数。AC代码:#include<bits/stdc++.h>using namespace std;con
2021-11-24 22:05:36
762
原创 Assign the task(线段树 + DFS序)
题目链接:Assign the task(HDU - 3974)题目大意:现有一棵树,有以下操作:1 . 节点x及其所有子孙颜色都变更为k。2 . 要求你回答节点x的颜色。解题思路:对于题目要求,我们需要维护的是一棵树,我们知道树是一种树形结构而非线性结构,因此操作起来比较复杂。那么我们是否可以将树形结构转换成线性结构那,答案是肯定的。DFS序就是一种很好的方法。DFS序是将树形结构转化为线性结构的一种方式,用dfs从根节点遍历一遍这棵树,进入到x节点时有一个in时间戳,递归退出时有一个out
2021-11-22 15:54:28
275
原创 Codeforces Round #753 (Div. 3) (A~E)
A. Linear Keyboard题目大意第一行给你一个长度为26的字符串,代表26个字母的排列循序,相邻字母的距离为 1 。第二行给你一个字符串,问从头走到尾共走了多长的距离。解题思路暴力枚举即可。AC代码#include <bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d", &t); while (t--) { string s1, s2; cin >&g
2021-11-05 16:59:03
108
原创 Codeforces Round #752 (Div. 2) (A~D)
A. Era题目大意给你一个长度为n的数组a,每次操作可以在数组的任意位置插入任意一个正整数。使得最后数组满足,对于任意索引i,a[i]<=i。问最少的操作次数?解题思路暴力枚举n个数即可,如果 a[i] > i,则在 i - 1 位置插入a[i] - i 个 1 即可,最后求一下一共插入了多少个数。AC代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N
2021-11-01 19:04:13
166
原创 Codeforces Round #751 (Div. 2) (A~C)
A.Two Subsequences题目大意给你一个字符串 s。您需要找到两个非空字符串 a 和 b,以满足以下条件:(1) 字符串 a 和 b 都是 s 的子序列。(2) 对于每个索引 i,字符串 s 里的字符 s [ i ] 必须恰好属于字符串 a 或 b 之一。(3) 字符串 a 是字典序最小可能的;字符串 b 可以是任何可能的字符串。对于给定的字符串 s,打印任何有效的 字符串a 和字符串 b。解题思路因为题目要求字符串a的字典序最小,所以,我们可以让字符串a是字符串s里面最小
2021-11-01 00:44:51
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人