- 博客(31)
- 收藏
- 关注
原创 C. Harry Potter and the Golden Snitch
题目大意:一个球在一个三维空间中沿着一条折线以固定速度移动,Harry Potter可以从给定的点开始以固定速度沿任意方向移动,问你Harry Potter能否在球到达终点前抓住这个球,如果可以就输出最早能够抓到球的位置。,先求出当前时间球位于什么位置,再看Harry Potter到达这个位置需要花费的时间是否小于等于。因为是实数范围,所以浮点二分时的精度需要尽可能大,不然容易出现误差导致答案错误,这个题至少要开到。)的时间,如果Harry Potter能在这条线段上面抓住球,那么花费的时间肯定是在区间。
2024-10-11 10:40:30
277
原创 The 18th Northeast Collegiate Programming Contest M-House
问题就变成了通过维护一个什么样的数据结构来降低枚举的时间复杂度,一开始的想法是把所有的线段先算出来,然后从中任取一条线段,通过线段的两个端点作垂线,判断是否有其他的点在这两条垂线上,如果存在就算出他到线段的距离,每一对距离相等的点相连构成的新线段就能和选出的线段组成一个矩形,再去求线段的中垂线,看有多少个点位于中垂线上。而且距离一条线段距离相等的两个点不一定是在线段的同一侧,所以合理的解法是选择一条线段,枚举他两侧的点,一侧的点用来构成矩形,另外一侧的点用来做房子的顶点。级别的,所有时间复杂度应该是。
2024-10-11 09:40:12
650
原创 I. Disks
再仔细想想,当联通块中点圆不连成环的时候,将每个圆编号,如果联通块的大小为偶数会导致不合法是因为当增大编号为奇数的圆时,所有编号为奇数的圆也应该同时增大,奇数圆的个数和偶数圆的个数相同,所有增大的值和减小的值相互抵消。我们可以按照奇偶性把一个联通块中的圆分成两部分,如果这两部分的个数不相同,我们就一定能通过改变个数少的那一部分中某个圆的半径来使所有圆的半径之和严格减小。仔细想想,当联通块中点圆不连成环的时候不就是每个奇数圆刚好只和一个偶数圆匹配吗,就可以套个二分图匹配的板子来解决了。然后交上去,WA11。
2024-10-10 21:16:00
448
原创 I. Spinach Pizza
题意大概就是Alberto和Beatrice轮流吃披萨,每次可以选择披萨剩余部分的一个顶点,吃掉由其两条相邻边围城的三角形。是个交互题,让你从Alberto和Beatrice中选择一个,帮助他赢得胜利。剩下的就是每次寻找最小的由一个顶点及其其两条相邻边构成的三角形,并且删除其该顶点即可。为奇数时,Alberto会比Beatrice多吃一次,所以Beatrice肯定会赢,这时候选择帮助Beatrice。,所以当为偶数时,选择帮助Alberto。当两个人吃的次数相同的时候,也就是。
2024-10-10 20:37:59
217
原创 C. Nezzar and Nice Beatmap
根据高中所学的三角形有关知识,可以知道在一个三角形中,一个角的角度越大,它对应的边长就越长,并且一个三角形(包括退化三角形)中最多存在一个大于或等于90度的角。根据这两个性质,我们首先随便选择一个点加入集合中,每次从剩下的点中选择和最新放入的点最远的点加入集合,即可保证所有角度小于90度。(不太会画图,具体证明可以自己随便画几个点来进行验证)。但是题目卡了精度,计算距离的时候不要直接开根号再返回,直接使用距离的平方值即可。题目数据范围很小,直接。
2024-10-10 17:08:36
332
原创 计算几何题单
Problem - 1477C - CodeforcesProblem - 1979E - CodeforcesProblem - 1776I - CodeforcesProblem - 1949I - CodeforcesProblem - 1666I - CodeforcesProblem - 630P - CodeforcesProblem - 65C - CodeforcesP10695 [SNCPC2024] 商路
2024-10-10 16:54:50
246
原创 L. Machining Disc Rotors
个形状为圆的切割臂切割之后剩余图形(可能是非凸的)的直径,也就是就最远的两个点。很容易想到的是求出所有的交点,枚举任意两个交点之间的距离取最大值,但是还可能存在最远距离为直径的情况。求所有的交点很简单,关键在怎么判断最远距离为直径的情况,也就是求是否存在一个交点关于点。对称的点没有被切割掉,那么最远的距离就是圆的直径。对称的点不被任何一个机械臂包含。题目让我们求一个圆心位于。表示这个圆的圆心)被。
2024-09-11 20:42:40
340
原创 2024 ICPC ShaanXi Provincial Contest E.Trade Road
假设存在一条合法商路,设C、D为圆上不同于A、B的两点,之间不可能建立一条合法商路。
2024-08-09 19:49:21
627
原创 贪心练习专题
要是遇到不合法的情况,就将已经选择的利润最小的工作取消,看看把当前这的工作加入进去。我们先按照限制条件(建筑报废时间)从小到大排序,要是遇到不能修好的建筑,就将这个建筑和已经选择修好的建筑中花费时间最久的比较,将花费时间小的放入堆中。因为我们是按照截止时间排序的,所以弹出一个修理任务之后,我们花费的时间会减小,但是这个建筑的报废时间一定要比弹出的建筑的报废时间更晚,所以一定能在这个建筑报废前修好它。但是很明显,要是按照选择二、三、一的顺序来选择,这是合法的,能获得25的利润,比刚才的方法更优。
2024-04-10 21:05:58
435
原创 牛客周赛 Round 37
大于9输出,否则输出。排序后找到小于等于的最大值,可以二分找,但是数据少直接暴力去找到即可。先算出的值,因为495只有三位数字所以在结尾加的数不可能超过495,直接从0-495枚举加到结尾后合法的数即可。需要注意有前导0的情况,比如可能加1不合法,但是加01是合法的(昨天的用例是不存在这种情况的,今天重新交发现过不了了)。首先思考要是字符串为的情况下,因为是小红先手,所以剩下的肯定是。再思考,结果还是和前面一样的,小红直接删除子串,留下。如果是,小红先手删除,剩下,小紫删除,剩下。
2024-03-18 17:08:52
475
原创 2024牛客寒假算法基础集训营2
结合前面的分析可以得出,顶点的值越大,被使用的次数越多,顶点值最大的会被所有点使用,顶点值第二大的只是不会被顶点值最大的点使用。我们可以先把1和2出现的位置保存下来,因为每次要将颜色为x的最右边那颗宝石、以及该宝石右边的所有宝石全部消除,要保证最少的操作次数,所以需要判断1和2的最右边的下标中哪个更小,删除小的那个,然后将1和2中在这个数后面的位置全部去掉。然后情报4规定了未知内容,未知的内容就是所给字符串中的a,b,c,d和_,所以我们直接枚举a,b,c,d,_的值即可。剩下的以此类推,可以得到。
2024-02-06 00:11:26
1273
1
原创 牛客周赛 Round 31
在插入的时候首先要使x的右指针的值等于y的右指针,x的左指等于y;然后将y的右指针改为x,原本y后面的那个数的左指针改为x(这两个顺序一定不能乱,就是因为这里写反了WA了好久)。删除操作就比较简单了,只需要将x的前一个数的右指针变成x的右指针,x后一个数的左指针变成x的左指针即可(删除操作不需要考虑顺序)。的范围是1e9),直接用map建立一个ne来表示某个数字的后一个数字是什么。我们不难发现从题目给定的字符两边的字符数量必须相同,可以先在字符串中找到给定字符,然后以这个位置为中值的子串个数为。
2024-02-05 01:18:29
398
1
原创 牛客周赛 Round 30
一开始用了一个很麻烦的写法,找出与第一个字符不同的字符,将这个字符与第一个字符交换。想写法的时候发现很麻烦,需要存下出现过的所有字符和每个字符出现的位置,最后用map套pair实现了。后面看队友的写法发现,直接找到两个相邻的不用字符直接交换就行。不难发现先执行操作二,再执行操作一可以得到最多的可能数。的最大值,取值方案数为左右边界中所有整数。树形DP模板题,和组合类似,需要用乘法。如果不除只能得到两种取值。两个条件,所以右边界应该取。的最小值,左边界应该取。
2024-01-29 22:29:14
270
原创 23届专题训练:简单数学
首先,素数的定义为:在大于1的自然数中,除了1和该数自身外, 无法被其他自然数整除 的数。又因为前面提到的定理,可以发现我们只需要把所有的素数的倍数都标记一遍,就可以把所有的合数都标记出来了(因为如何一个数都能由若干个素数相乘得到)。相同的青蛙的路线也是相同的,也就意味着会被同时抓住,可以用map存在一起,减少计算次数。但是我们遍历完之后,是无法访问到7的。因为我们可以随意的制造想要的数组,所以我们尽可能的把大的数放入集合。的值,再去枚举这个值的因数,如果存在不为1的因数,那么我们就得到的。
2023-11-11 18:48:06
246
1
原创 前(后)缀和的神奇应用
最大值的最小可能,可以用二分答案解决,但是题目有m次输出,直接二分答案时间复杂度为。第二种解法:我们可以用后缀和求出如果还留在学校的人数最多的班级的最少的可能人数为。所以我们可以先预处理出来如果还留在学校的人数最多的班级的最少的可能人数为。然后我们去二分可能的答案,对于每一个mid,应该走的学生数量(然后我们去二分可能的答案,对于每一个mid,应该走的学生数量(,说明我们多算了一部分拖堂的人数,这种情况需要将。,说明我们多算了一部分拖堂的人数,这种情况需要将。表示还留在学校的人数最多的班级的最少数量为。
2023-10-31 21:08:08
105
1
原创 The 13th Shandong ICPC Provincial Collegiate Programming Contest B. Building Company
The 13th Shandong ICPC Provincial Collegiate Programming Contest B. Building Company
2023-10-15 21:35:30
329
1
原创 2023新生开学训练Z ~ AB
首先明确平年和闰年的定义,如果某个年份能被4整除但是不能被100整除或者是年份能被400整除,那么这一年就是闰年,否则为平年。根据常识可以知道,假设某一年1月1日为星期一,如果这一年为平年,那么下一年的1月1日就是星期二,也就是当前年份的星期数+1。如果这一年是闰年,那么下一年的1月1日就是星期三,也就是当前年份的星期数+2。题目要求完全一致,所以输出年份要和给定年份同为平年或是同为闰年。因为动态规划比较抽象,看不懂的可以自己去这个链接学学01背包。假设当前遍历到的字符为。的镜像位置上的字符是不是由。
2023-09-30 20:07:50
109
原创 Codeforces Round 898 (Div. 4) A - H
当字符串的两端都有A的时候就会有不一样的情况了,"ABAAAABAABAA",我们可以发现我们只有一段连续的A不能操作,所以最多能获得的硬币数量为A的数量减掉A字符的最短连续长度;但是当"AABABBAAAABA"时我们发现,能够将所有的A都取完,因为我们可以将字符串从相邻的两个B字符中间分开,得到了两个两端都只有一个字符A的字符串,所有的字符A都可以进行操作。每个 "环 "都有不同的分值:最外层的 "环 "为 1 分,下一层的 "环 "为 2 分,......,中间的 "环 "为 5 分。
2023-09-27 01:32:54
568
1
原创 Educational Codeforces Round 152
一片奶酪或火腿 一片面包 所以它总是在顶部和底部都有面包,并且在面包和馅料之间交替,其中馅料是奶酪或火腿的一片。Monocarp的角色有一种能力,可以对当前生命值最高的怪物造成k点伤害。如果Monocarp使用他的能力后,一个怪物的生命值变得小于或等于0,则它死亡。你的任务是确定怪物死亡的顺序。因为每次只将最大的数减掉k并且所有怪物初始血量都是大于0的,在有怪生命值小于或等于0之前,所有怪的血量都处于1~k的范围。所以这题只需将怪物的血量模k之后排序即可(当怪物血量模k等于0时要将模后的值改为k)。
2023-09-27 00:00:04
228
1
原创 军训场I、J
求周长的最小值。输出的边长必须满足相乘等于面积。暴力枚举面积S的所有因子x,一条边长为因子x,另外一条边长为S/x,周长为(x + S/x)*2,对每次枚举的答案取最小值即可。
2023-09-18 21:26:50
88
原创 Educational Codeforces Round 152 (Rated for Div. 2)
题意:一排有n瓶药水,最左边的是药水1,最右边的是药水n。ai可以是负数,意味着药水会降低你的生命值。在每一瓶药水前,你可以选择喝掉它或者忽略它。题意:给定一个n,求可以由11,111,1111,11111,…一个反悔贪心的题目,用sum记录当前生命值,直接从左向右遍历药水,当药水的值为负数的时候存入小根堆。,所以如果一个数可以由11,111,1111,11111,…题目让我们将数组的元素排列成一个圆圈,使得没有一个元素等于其两个邻居的算术平均值。,可以直接用拓展欧几里得求解,也可以直接暴力枚举a的值。
2023-09-07 19:03:23
121
1
原创 robocom选拔赛补题
实际上a为{7,10,5}时,先给10的猫猫取长度大于7的名字不会对其他两只猫猫产生影响,但是取1~5的长度的名字时会对另外两只猫猫都产生影响,6~7的长度时只对一只猫猫有影响。后面的猫猫的取名总可能数(不考虑其他猫猫的影响)只需要减去在它前面的猫猫数量就是实际的总取名可能数。不合理的情况为名字长度为ai的猫猫数量大于pow(26,x)(1 <= x <= ai)的累乘。当时想复杂了,一开始想选了一种情况之后后面的要变成pow(26,x - 1) * 25(1 <= x <= ai - 1)的累乘。
2023-05-15 22:09:52
274
1
原创 Codeforces Round 873 (Div. 2) A~C
反过来从后往前遍历的话,后面的数不会对前面的数产生影响,直接二分找到a数组中大于b[i]的下标(即对于b[i]有多少种选择),再减去已经用过的数,相乘取模。如果从b数组的开头往后遍历每个数有多少种可能,后面的数的选择可能会对前面的数产生影响。当首项为2,公差为2的前n项和公式:n * (n + 1)直接输出i * 2(1 <= i <= n)即可。求出每个数减自身下标的绝对值,求GCD。先将a、b两个数组从小到大排序。
2023-05-15 21:01:18
118
1
原创 Educational Codeforces Round 148(Rated for Div. 2) A~C
当s的长度为偶数时去掉最中间的两个字符,奇数时去掉最中间的字符,判断剩下的字符种类是否大于两种即可。可以发现对于一段单调的区间,可以只保留开头和结尾的两个数,所以直接求出极值个数即可。前缀和预处理之后,枚举所有可能。
2023-05-15 20:23:55
139
1
原创 Codeforces Round 872 (Div. 2) A~C
当vector中有人(person)入座时,仍可以让-1和-2的人入座,-1可以坐在person左边的座位(遇到vector中有人想坐这个位置时可以让vector中的先坐,可以最大化总人数),-2同理。2.将最小值放在(1,1)位置,(1,2)上放最大值,(2,1)上放第二大的值,这样构造之后第一列总和为abs(min - max1(第二大) ) * (n - 1)(因为(1,1)点为0,所以减去1),其余的总和为abs(max - min) * (n * m - n);
2023-05-10 09:33:16
221
原创 洛谷 P2671 [NOIP2015 普及组] 求和
对于颜色1:总和为(a1 + a3) * (num1+num3) + (a1 + a5) * (num1 + num5) + (a3 + a5) * (num3 + num5) = a1 * (num1 + num2 +num3) + a3 * (num1 + num2 +num3) + a5 * (num1 + num2 +num3) + a1 * num1 + a3 * num3 +a5 * num5;所以我们只需要将所以颜色相同的数存放到一起,再从中找出所有符合上述条件数就可以了。
2023-04-13 21:48:11
417
1
原创 洛谷 P1435 [IOI2000] 回文字串
先将原字符串和逆序字符串写出S="Ab3bd",S'="db3bA"。不难发现分别去掉S与S'中相同的字符就能得到需要添加的字符(只能去掉相同位置上相同的字符) "Ad"、"dA",所以只需要在S中添加"Ad"变为"Adb3bdA",就能得到回文字串。但是这里需要注意一个细节,i - 1可能访问到负数所以需要在原字符串和反转之后字符串前加上一个空格(' ')来避免非法访问。
2023-04-12 21:58:13
655
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅