自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 自适应辛普森(Simpson)积分

很多时候,我们会面临一些求积分的问题,无论是直接给你函数,让你想办法求解积分,还是对于一些计算几何问题,无法直接推导积分,我们都可以用这种方法来求一段区域的积分,积分的相关基础概念这里就不再赘述,今天主要就是说明他的大致原理,和他的用法。一个普通的思路就是,把要求的积分区间分解成一个个小的区间,然后累加在一起,但是这样做的缺点就是,如果为了保证精度,每个区间都会很小,所以这样就很容易会TLE。至于为啥要弄15, 这里有个论文给了解释,感兴趣可以了解,不感兴趣,存个板子直接用就好了。这里在介绍一个优化技巧。

2022-10-16 16:44:23 1195 2

原创 一些常见的数列问题

很多时候,性质往往也不容易发现,与卡特兰数紧密相关的数列也不止这几项,但是在比赛中,我们完全可以通过打表求出前几项,然后查oeis来得到这些经典数列的递推式,oeis上往往会给出更详细的数列描述,方便辨别是否是你想要的数列。他的本质其实是表达一类关系。在组合数学中,施罗德数用来描述从(0,0)到(n,n)的格路中,只能使用(1,0)、(0,1)、(1,1)三种移动方式,始终位于对角线下方且不越过对角线的路径数。比如有一个 1∗n的矩阵,固定第一个数为1,其他填正整数, 且相邻数的差不能超过1,求方案数。

2022-10-16 16:43:53 782

原创 康托展开和逆康托

康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n) ,可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。也就是说,康托展开可以用来求一个 的任意排列的排名。暴力O(n^2),树状数组优化可以做到O(nlogn).但是求排列,一般n不会很大。他的具体原理也不复杂,不过没啥用,不浪费时间展开说明,感兴趣百度有很多优秀的解释。其实就是把康托展开的过程反过来,给你排名,让你求出这个排名对应的排列。

2022-10-16 16:43:14 258

原创 摩尔投票的应用

摩尔投票

2022-10-16 16:42:26 704

原创 Codeforce Round #640 Div4

Codeforce Round #640 Div4一直听说cf之前搞过一场div4,所以找了个时间vp了一下,题目还是挺有意思的,感觉全是构造题。不知道为啥后来不办了,vp虚拟rank进了前30,前面写的有点慢,写简单题的速度还得在练练,简单写个题解把A.Sum of Round Numbers题意就是给你一个数,拆分成几个数,让拆分后的数都只有第一位不为0,感觉我写的有点麻烦了#include<bits/stdc++.h>using namespace std;using ll=l

2022-03-26 07:37:55 975

原创 Codeforce Round #762 Div3 题解报告

Codeforce Round #762 Div3今天vp了下这套div3,前三题倒很顺利,做d的时候看错题,mn读反了,并且搞了一个错误的维护次大和最大的方案,虽然这个方案好像也能做,但是确实很麻烦,然后看E也没顺利调出来,没有想清楚具体操作的过程,F,G赛后都补了A.Square String?问有没有相同的字符串,可以简单的考虑奇数不行,偶数就切一般就行#include<bits/stdc++.h>using namespace std;using ll=long long;

2022-03-23 02:29:54 321

原创 codeforce round 753 div3 题解报告

codeforce round 753 div3 题解报告在vp比赛的时候只过了5题,后三题跨度还是挺大,不过也有前五题写的慢的愿意在里面,没有太多时间看后面的题。A. Linear Keyboard给你一个键盘的顺序,让你模拟打某个单词需要的步数,稍微对应建立映射即可#include<bits/stdc++.h>using namespace std;int t,n;map<char,int>mp;int main(){ string s1,s2; scanf

2021-11-17 04:17:10 360

原创 Codeforces Round #744 (Div. 3) 解题报告

这套题打的时候只写了前5个题,都比较基础,但是后面三个题补了之后还是收获很大,记录一下题解报告和一些需要注意的细节A. Casimir’s String Solitaire题意:一个由A,B,C组成的字符串,每次可以同时删除A和B或者B和C,给一个字符串,问能否删干净。考虑删除的一个不剩,每次都要消耗两个,只需要判断A的数量+C的数量是否等于B的数量即可 #include<bits/stdc++.h>using namespace std;int t,a,b,c;string s

2021-10-07 04:50:12 157

原创 Codeforces Round #731 (Div. 3)解题报告

Codeforces Round #731 (Div. 3)解题报告最近开始训练思维了,先从cf的div3练起吧,EFG都是后面补出来的,还是很有收获的,记录下每个题的做法A Shortest Path with Obstacle很基础,就判断下中间点有没有被两个点夹住即可。#include<bits/stdc++.h>using namespace std;int xx1,x2,x3,yy1,y2,y3;int main(){ int t; scanf("%d",&

2021-09-30 23:16:09 241

原创 codeforce round 742 div1+2.D. Take a Guess(交互题)

D. Take a Guess做cf也已经有一段时间了,一直听说过交互题,但是没有自己写过,今天自己写了一道交互题。就记录一下一些关于交互题的细节。首先交互题目的格式就是通过你给评测机发送询问,评测机实时返回你问题的答案,注意的是,当你进行提问后需要清空缓冲区的内容。这里只介绍c++的用法,如果你是用printf发起提问的,在读取答案之前要输入fflush(stdout)来清空缓存,如果用cout进行提问,记得问题后面带一个endl。会自动帮你清空缓冲区。然后问完问题后,立刻读取问题的答案,通过一定次

2021-08-31 13:59:40 501

原创 组合数学+概率,期望+生成函数一文全精通

前言本文介绍的内容是关于组合数学和概率方面的一些内容,提到组合数学,大家可能多多少少都有一些印象或者基础,高中的时候也应该练习过不少组合数学相关的题目,当然,如果往深了追究,组合数学包含的内容远不是这一篇文章可以说清楚的,本文意在帮助大家复习或者学习在ACM竞赛中,我们经常会遇到的组合数学问题和对应的解法。目录一.组合数学1.加法原理2.乘法原理3.排列组合的基础性质4.组合数的几种常见求法5.常见的计数技巧6.二项式定理7.多重集的排列组合8.卡特兰数等特殊数列9.容斥原理10.

2021-08-11 07:45:35 3116

原创 数论入门知识

数论入门提到数论,可能很多人都感到很头疼,甚至很多时候遇到一些问题,看到成篇的证明都会感到恐惧,而且由于关于ACM方面的数论资料,网上资料都比较驳杂。有时候很容易出现知其然不知其所以然的情况。所以今天给大家介绍一些关于数论入门最基础的知识和算法,内容会尽量从0基础开始,所以内容会尽量详细。不过其中部分证明还是需要一些高中数学基础的。由于内容很多,我整理了一个目录,按顺序讲今天的内容.目录一.合数,质数,整除,互质,同余,取模等基础概念。二.欧几里得算法三.扩展欧几里得四.费马小定理五.欧拉函数

2021-08-01 09:19:39 17753 6

原创 codeforce Round 734 div3 题解报告

总结其实这场比赛也没啥好总结的,当天过生日,就没有打这场比赛,第二天刚好有空就找时间虚拟参与了一下。题目难度不大,都是代码量很小的思维题。做的时候还是遇到了很多卡住的问题。之后补题发现很多题自己的写法都不够优秀。这里写一篇题解记录一下这套题。如果有不对的地方,欢迎私信我来探讨。A. Polycarp and Coins这个A就是基本的签到,判断n%3的结果来确定是一样多还是1元多还是2元多。没有坑点#include<bits/stdc++.h>using namespace std;

2021-07-27 08:59:53 210

原创 最小生成树刷题汇总

Acwing 346 走廊泼水节给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树。求增加的边的权值总和最小是多少。注意: 树中的所有边权均为整数,且新加的所有边权也必须为整数。输入格式第一行包含整数 tt,表示共有 tt 组测试数据。对于每组测试数据,第一行包含整数 NN。接下来 N−1N−1 行,每行三个整数 X,Y,ZX,Y,Z,表示 XX 节点与 YY 节点之间存在一条边,长度为 ZZ。输出格式每组数据输出一个整数,表示权值总和最

2021-07-16 06:03:41 1483 1

原创 SZTUOJ 1025.怪物入侵

Description有 n 个怪物站成一排,编号从 1 到 n 。第i个怪物有 Hi 点生命值。你的攻击力为 a ,你的对手的攻击力为 b ,你和你的对手只能轮流对同一个怪物造成伤害。如果怪物的生命值小于或等于0,则认为它已经死亡,只有当前怪物死亡,你们才可以去挑战其他怪物。如果怪兽死于你的最后一次进攻,你加一分,否则没人加分。你有一种魔法可以迫使你的对手跳过一次攻击。你最多可以使用这个魔法k次。我们保证每次更换怪物的时候,都由你来先手。问如果采取最佳策略,你能获得多少分。Input输入的第一行包含

2021-06-25 12:07:45 429

原创 SZTUOJ 1024.在二叉树寻求邂逅是否搞错了什么

Description著名的zjb学长不曾说过:“邂逅一个心仪的女孩子比在二叉树上找一个节点要容易的多。”现在给你 n 个节点编号和一个完全二叉树(如图),请你求出这些节点的层数。设定根节点为第一层,其子节点为第二层,依此类推。Input输入的第一行为一个整数 n ,代表有 n 个节点。从第 2 行到第 n+1 行各有一个整数ai,表示待求的节点编号Output输出为n行,每行有一个整数,表示第 i 个节点的层数 CiSample Input535182Sample Outpu

2021-06-25 12:07:16 102 1

原创 SZTUOJ 1023.万圣节大作战

Description一年一度的万圣节马上就要到了,弓箭手小明和剑士小刚约好一起去猎杀幽灵,一共有n个幽灵,第i只幽灵会掉落ai件弓箭手装备,bi个剑士装备。小明的收获总和是他猎杀的幽灵的ai值之和。小刚的收获总和是他猎杀的幽灵的bi值之和。小明小刚轮流行动,小明先手。两人都能保证一击必杀。小明和小刚的目的尽可能让自己收获比对方高。你需要求出两人都使用最优策略的情况下,输出他们的收获差。我们保证所有幽灵掉落装备总价值不同。Input第一行输入一个正整数n表示幽灵个数 第二行输入n和数a1,a2,a3…

2021-06-25 12:05:20 169 1

原创 SZTUOJ 1022.辉辉翻扑克牌

Description辉辉将很多张扑克牌摆成一行放在桌上,有正面朝上的,也有背面朝上的。正面朝上的用1表示,背面朝上的用0表示。现在要求从这行的第一张扑克牌开始,将前若干张扑克牌一起翻面,问如果要将所有扑克牌翻到正面朝上,最少要进行这样的操作多少次?Input一个字符串,由0和1组成,表示扑克牌状态OutputSample Input10Sample Output2Hint样例1说明:第1次翻转:把第一张扑克牌翻到反面,字符串为00第2次翻转:把第一、二张扑克牌一起翻到正面,字符

2021-06-22 10:07:18 182

原创 SZTUOJ1021.食堂调查

Description因为新生的加入,最近食堂经理想统计新生最爱吃的菜,所以食堂经理亲自来到餐厅记录每个学生点菜的名单,为了响应国家关于节约粮食的号召,食堂所有菜品都可以点半份,现在我们想知道今天中午哪个菜最受欢迎。今天一共来个n个学生吃饭,每个学生点了一份或半份菜品。请你统计卖的最好的菜是什么。平票则输出字典序的第一个菜品。Input第一行输入一个n,表示一共有n个同学,第二行到第n+1行每行有一个数字和一个字符串,其中数字为1或0.5,表示菜品的份数,字符串为菜名。Output输出最受欢迎的菜

2021-06-22 10:05:40 145

原创 SZTUOJ 1020.钱钱的steam游戏

Description一共有n(n≤32768)SZTUer(以1–n编号)向钱钱索要steam的游戏,虽然钱钱十分富裕且帅气,但他最近在谈恋爱很耗钱,所以钱钱只能送给其中的k个人。钱钱按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i]。然后将初始权值从大到小进行排序,每人就有了一个序号D[i](取值同样是1–n)。按照这个序号对10取模的值将这些人分为10类。(也就是说定义每个人的类别序号C[i]的值为(D[i]-1) mod 10 +1)显然类别序号的取值为1–10。第i类的人将会额外得到E

2021-06-22 10:03:20 120

原创 SZTUOJ 1019.总之就是不太可爱

Description“总之就是不太可爱!”zjb学长对字符串很有研究,在他看来有些字符显然不太可爱。某天有几个可爱的女生拿着自己的c语言程序来向zjb请教,这时zjb注意到程序里的有些变量名中有不太可爱的成分,可是他现在要专心回答问题,于是请你来编写程序帮他找出不可爱的部分。Input输入的第一行由若干个不同的字符组成,这些字符都被认为是不可爱的字符,从第二行开始每行都有一个字符串,代表待判断的变量名Output每一个变量名对应一行输出,如果这个变量名存在不可爱的字符,则输出删除不可爱字符后的新

2021-06-19 05:48:57 183

原创 SZTUOJ 1018.素数

Description质数(Prime number,又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。现输入a和b两个数,输出a和b范围内(包括a,b)的所有素数,如果没有则输出-1。Input输入a和bOutput输出范围内所有的素数,没有则输出-1Sample Input10 20Sample Output11 13 17 19Hint1≤a,b≤1,000SourceSZTU Monthly 20

2021-06-19 05:47:53 127

原创 SZTUOJ 1017.火柴人

Description今天,你买了一盒火柴,打算和同学比拼谁能用有限的火柴得到一个最大数字。火柴拼数字规则是,拼出零到九分别需要6、2、5、5、4、5、6、3、7、6个火柴。我们会给你n个不同火柴数,求问不同的火柴数分别最多能组成多大的数字。如果不能组成数字,输出-1。 对于某个特定的火柴数a,求出其能组成的最大的数字Input第一行输入一个n,接下来n行每行一个个数a,0<=a<=2^31-1Output每行输出一个能组成的最大数字。Sample Input3124Sa

2021-06-19 05:46:49 490

原创 SZTUOJ 1016.zjb学长想要玩!

Descriptionzjb学长虽然是个爱学习的人,但他偶尔也会想要玩,可是他的作业太多了,以至于他不知道要多长时间才能完成作业。于是他找到了聪明的你,请你编写程序计算他完成所有作业需要的时间Input输入共n+1行。第一行为一个整数n,表示共有n(n<=500000)项作业,接下来n行整数分别代表完成第i项作业需要的时间TiOutput输出为一个整数,表示完成所有作业需要的总时间Sample Input512345Sample Output15Hint保证包括输入

2021-06-16 06:21:07 178

原创 SZTUOJ 1015.闰年

Description闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的,补上时间差的年份为闰年。闰年2月有29天,全年共有366天,分为普通闰年和世纪闰年,普通闰年是指公历年份是4的倍数的,且不是100的倍数,世纪闰年则必须是400的倍数。Input输入一个年份NOutput判断它是否是闰年,是闰年输出”N is a leap year.“,否则输出”N is not a leap year.“Sample Input2020Sample

2021-06-16 06:12:14 143

原创 SZTUOJ 1010.最优对称路径

。。。

2021-06-16 05:56:35 81

原创 SZTUOJ 1009.打怪升级

。。

2021-06-16 05:55:56 98

原创 SZTUOJ 1008.盒子游戏

Description有两个相同的盒子,其中一个装了n个球,另一个装了一个球。Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作。每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后清空这个盒子(盒子里的球直接扔掉),然后把另一个盒子里的球拿一些到这个盒子中,使得两个盒子都至少有一个球。如果一个游戏者无法进行操作,他(她)就输了。下图是一个典型的游戏: Alice Bob Alice(5,1)----->(2,3)---

2021-06-16 05:50:47 262

原创 SZTUOJ 1007.多连块分解

Description多连块是指由多个等大正方形边与边连接而成的平面连通图形。—— 维基百科给定一个大多连块,你的任务是把它分解成至少两个全等(不能翻转或者旋转)的小多连块。下面的左图是一个合法的分解,右边两幅图不合法。中间那幅图的问题在于其中一个小多连块旋转了,而右图的问题在于其中一个小多连块翻转了。分解出的小多连块数量越少越好。注意:本题一定有解,因为至少可以分解成一大堆单位正方形。Input输入最多包含30组测试数据。每组数据第一行为一个整数n(1<=n<=10)。以下n行

2021-06-13 07:44:41 519

原创 SZTUOJ 1006.多连块拼图

Description多连块是指由多个等大正方形边与边连接而成的平面连通图形。—— 维基百科给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成。小多连块只能平移,不能旋转或者翻转。两个小多连块不得重叠。左下图是一个合法的拼法,但右边两幅图都非法。中间那幅图的问题在于其中一个小多连块旋转了,而右图更离谱:拼在一起的那两个多连块根本就不是那个给定的小多连块(给定的小多连块画在右下方)。Input输入最多包含20组测试数据。每组数据第一行为两个整数n和m(1<=

2021-06-12 04:59:32 1022 1

原创 SZTUOJ 1005.报数游戏

Descriptionn个人站成一行玩一个报数游戏。所有人从左到右编号为1到n。游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等。当编号为n的人(即最右边的人)报完n之后,轮到他左边的人(即编号为n-1的人)报n+1,然后编号为n-2的人报n+2,以此类推。当最左边的人再次报数之后,报数方向又变成从左到右,依次类推。为了防止游戏太无聊,报数时有一个特例:如果应该报的数包含数字7或者是7的倍数,他应当用拍手代替报数。下表是n=4的报数情况(X表示拍手)。当编号为3的人第4次拍手的时候,他

2021-06-12 04:56:56 259 3

原创 SZTUOJ 1004.一二三

Description你弟弟刚刚学会写英语的一(one)、二(two)和三(three)。他在纸上写了好些一二三,可惜有些字母写错了。已知每个单词最多有一个字母写错了(单词长度肯定不会错),你能认出他写的啥吗?Input第一行为单词的个数(不超过10)。以下每行为一个单词,单词长度正确,且最多有一个字母写错。所有字母都是小写的。Output对于每组测试数据,输出一行,即该单词的阿拉伯数字。输入保证只有一种理解方式。Sample Input3owetootheeeSample Outp

2021-06-10 03:50:58 516

原创 SZTUOJ 1003.A+B(III)

DescriptionYour task is to Calculate a + b.InputThere are multiple test cases. Each test case contains only one line. Each line consists of a pair of integers a and b ( 1 <= a, b <=10e16 ) , separated by a space. Input is followed by a single line

2021-06-09 06:38:43 63

原创 SZTUOJ 1002. A+B(II)

DescriptionYour task is to Calculate a + b.InputThere are multiple test cases. Each test case contains only one line. Each line consists of a pair of real number a and b(0<=a,b<=1000000), separated by a space.OutputFor each case, output the answ

2021-06-08 06:10:53 88

原创 SZTUOJ 1001.A+B(I)

1001. A+B (I)DescriptionYour task is to Calculate a + b.InputInput contains multiple test cases. Each test case consists of a pair of integers a and b ( 0 <= a, b <= 20 ), separated by a space, one pair of integers per line.OutputFor each pair

2021-06-08 05:47:58 437

原创 四种基础数据结构的变种应用

最近重新复习了一下一些基础的数据结构,今天介绍四种基础结构的变种应用,分别是,单调栈,单调队列,01字典树和带权并查集,四种基础的数据结构都是很常见的,我们就直接介绍变种后的这些数据结构如何应用。每个部分都介绍一个最经典的例题。单调栈首先,顾名思义,单调栈指的就是栈内元素单调增或减的栈,单调栈可以维护的信息就是每个数前后第一个大于/小于他的数。这是单调栈的维护方法。单调递增栈:在保持栈内元素单调递增的前提下(如果栈顶元素大于要入栈的元素,将将其弹出),将新元素入栈。单调递减栈:在保持栈内元素单调递减

2021-05-26 15:01:57 128

原创 hash算法理解和应用

Hash模拟散列表这个问题要求我们把有限个数的数据范围较大的数,存储到一个较小的范围中,和离散化很像,实际上离散化就是一种特殊的hash方法,只是保证了有序,今天介绍的方法,是更常规的一种方法,或者说是一种存储结构。一般来说,hash表的存储结构分为两类,分别是开放寻址法,和拉链法,本质相差不多,但是拉链法所需空间更多,代码也更复杂,所以推荐大家使用开放寻址法来存储hash。一般来说,我们的hash函数设置起来可以用取模的方式来进行。严格来说就是对一个质数取模。找到第一个大于题目要求范围的质数来作为取模的

2021-05-25 17:24:36 270

原创 背包问题总结

背包问题总结说到动态规划,背包问题是大家都绕不开的一个问题,这篇文章将从最简单的01背包问题开始,尽可能详细的给大家介绍各种背包问题的解法01背包问题首先,背包问题中最简单的问题也就是这个01背包问题,我们先一起来看一下这个问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。我们需要判断的是,对于每一个物品,是选择他更好,还是不选择他更好。不管是贪心还

2021-05-18 00:11:47 247

原创 2021-天梯赛(cccc)比赛题解

写在前面今年的天梯赛因为四月事多,没有参加,后面抽空把题做了一下,难度不大,但是有不少细节需要注意。写一篇博客来稍微总结一下这套比赛的一些坑点吧。第一部分题目没什么好说的,贴一份代码放着。L-1-1 人与神#include<bits/stdc++.h>using namespace std;int main(){ cout<<"To iterate is human, to recurse divine."; return 0;}L-1-2 两小

2021-05-12 20:33:43 3593 3

原创 指数型母函数的应用

上一篇文章,我们介绍了最普通的母函数类型和它的应用,如果不理解母函数概念的可以先去看这篇文章了解https://editor.csdn.net/md/?articleId=115746930今天我们继续介绍母函数的另一种类型,指数型母函数,我们都知道普通型母函数只能帮助我们解决组合问题,也就是选出这些东西的组合方式,不考虑排列的顺序。如果问题变化为排列问题,普通母函数显然无法很好的解决这种问题。在介绍指数型的母函数之前,先给大家一个经典排列问题思考一下...

2021-04-20 23:26:51 495

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除