![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛知识要点
文章平均质量分 60
黄佳俊、
to be or not to be!
热爱生活!
执着学习!
展开
-
^:按位异或
a=a^b;b=b^a;a=a^b就可以交换 a,b的值1<<j 代表1进行左移j位 ,& 是按位与下面写的都是二进制 i=1010j=0 (1<<j )=0 0000& 1010= 0000 表示倒数第一位为0j=1 (1<<j )=10 0010& 1010= 0010 不为0 表示倒数第二位为1j=2 (1<<j )=100 0100& 1010= 0000 表示倒数第三位为0j=3 (1<<j原创 2021-10-16 19:55:18 · 948 阅读 · 0 评论 -
大数求余:即答案对1e9+7(1000000007)取模原因、方法总结
大数求余原因:大数越界大数越界:随着n增大,f(n)会超过Int32甚至Int64的取值范围,导致最终的返回值错误。当一个问题只对答案的正确性有要求,而不在乎答案的数值,可能会需要将取值很大的数通过求余变小。求余运算规则:设正整数x,y,p,求余符号为⊙。对于加法运算:(x+y)⊙p = (x⊙p+y⊙p)⊙p对于乘法运算:(x*y)⊙p = [(x⊙p)*(y⊙p)]⊙p以防x,y本身就超出int32范围,可以创建一个long型变量tmp保存临时结果。...原创 2021-10-16 19:50:56 · 2564 阅读 · 0 评论 -
算法题(c++) IncDec Sequence题解
问题描述给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,…,a_n},每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。输入格式第一行一个正整数n。接下来n行,每行一个整数,第i+1行的整数表示ai。输出格式第一行输出最少操作次数。第二行输出最终能得到多少种结果。样例输入41122样例输出12数据范围原创 2021-10-16 19:49:00 · 175 阅读 · 0 评论 -
动态规划|任务安排(题解)
题目描述有N个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变。机器会把这 N个任务分成若干批,每一批包含连续的若干个任务。从时刻0开始,任务被分批加工,执行第 i个任务所需的时间是Ti。另外,在每批任务开始前,机器需要S的启动时间,故执行一批任务所需的时间是启动时间 S加上每个任务所需时间之和。一个任务执行后,将在机器中稍作等待,直至该批任务全部执行完毕。也就是说,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数 Ci。请为机器规划一个分组方原创 2021-08-21 07:52:35 · 1668 阅读 · 0 评论 -
给定终点n,从1到n,或+1,或*2,求最小步数(二进制思想)
例子n从1开始,可以对n加1,或者加倍,要使n为2014的步数思路重点:二进制思想通过移位的方式:2014的二进制:111110 11110一开始是0000 0000 0001,乘以2相当于左移一位变成0010,然后加1后是0011,如此反复形成1111是要6步,形成11110(乘以2左移一位)是7步,形成11111(加1操作)要8步,以此类推:形成11111 0 1要11步,然后以最后那个1为起始形成11110需要7步,所以11+7=18结论2014的二进制为111110.原创 2021-06-02 22:00:24 · 1377 阅读 · 0 评论 -
裸求卡特兰数(c++)
问题描述:在一个格点阵列中,从(0,0)点走到(n,n)点且不经过对角线x==y的方法数(x> y)。法一、质分子分解:#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll mod=9982357;ll qpow(ll a, ll n, ll p=mod){ ll re = 1; while(n) { if(n & 1)原创 2021-06-01 09:35:33 · 710 阅读 · 2 评论 -
斐波那契数最小公因数性质:gcd(F[n],F[m])=F[gcd(n,m)]
引理1结论:F(n)=F(m)F(n−m+1)+F(m−1)F(n−m)推导:F(n)=F(n−1)+F(n−2)=2F(n−2)+F(n−3)=3F(n−3)+2F(n−4)=5F(n−4)+3F(n−5)=⋯=F(m)F(n−m+1)+F(m−1)F(n−m)看出系数的规律了,2=1+1,3=2+1,5=3+2,……用数学归纳法严谨证明一下:1)当m=2时,F(n)=F(2)F(n−2+1)+F(2−1)F(n−2)=F(n−1)+F(n−2)成立。原创 2021-05-31 14:30:54 · 466 阅读 · 0 评论 -
约瑟夫环问题(圆桌问题)最快算法
问题来源约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后kill所有人。于是约瑟夫建议:每次由其他两人一起kill一个人,而被kill的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在kill了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。大致题意在一间房间总共有n个人(下标0~n-1),只能有最后一个人活命。按照如下规则去清除人原创 2021-05-11 10:20:51 · 1750 阅读 · 2 评论 -
[Codeforces Round #717 (Div. 2)]AGAGA XOOORRR(^(异或)符号的特性)题解
B. AGAGA XOOORRRtime limit per test1 secondmemory limit per test256 megabytes题目描述Baby Ehab is known for his love for a certain operation. He has an array a of length n, and he decided to keep doing the following operation on it:he picks 2 adj原创 2021-04-22 11:20:49 · 324 阅读 · 0 评论 -
[Codeforces Round #716 (Div. 2)]Product 1 Modulo N(数论:简化剩余系的性质)题解
C. Product 1 Modulo Ntime limit per test1 secondmemory limit per test256 megabytes题目描述Now you get Baby Ehab's first words: "Given an integer n, find the longest subsequence of [1,2,…,n−1] whose product is 1 modulo n." Please solve the problem.原创 2021-04-21 08:27:24 · 331 阅读 · 0 评论 -
[Codeforces Round #716 (Div. 2)]AND 0, Sum Big(二进制分析,排列组合原理)题解
B. AND 0, Sum Bigtime limit per test2 secondsmemory limit per test256 megabytes题目描述Baby Badawy's first words were "AND 0 SUM BIG", so he decided to solve the following problem. Given two integers n and k, count the number of arrays of length n原创 2021-04-20 11:28:09 · 373 阅读 · 1 评论 -
Codeforces Round #713 (Div. 3) A-B Palindrome(复杂流程)题解
C. A-B Palindrometime limit per test2 secondsmemory limit per test256 megabytesYou are given a string sconsisting of the characters '0', '1', and '?'. You need to replace all the characters with '?' in the string s by '0' or '1' so that the str原创 2021-04-15 19:10:09 · 229 阅读 · 0 评论 -
[Codeforces Round #713 (Div. 3)] Permutation by Sum(求和技巧,set容器使用)题解
E. Permutation by Sumtime limit per test2 secondsmemory limit per test256 megabytes问题描述A permutation is a sequence of n integers from 1 to n, in which all the numbers occur exactly once. For example, [1], [3,5,2,1,4], [1,3,2] are permutations,原创 2021-04-15 19:02:42 · 222 阅读 · 0 评论 -
[AtCoder ABC-198D] Send More Money(map用法)题解
D - Send More MoneyTime Limit: 5 sec / Memory Limit: 1024 MBProblem StatementGiven stringsS1,S2,S3S1,S2,S3consisting of lowercase English letters, solve the alphameticS1+S2=S3S1+S2=S3.Formally, determine whether there is a triple ofpositiveint...原创 2021-04-15 16:41:03 · 547 阅读 · 0 评论 -
[蓝桥杯][2019年第十届真题]外卖店优先级(优先队列和map的使用)题解
题目描述“饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0。每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减 到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果 优先级小于等于 3,则会被清除出优先缓存。给定 T 时刻以内的 M 条订单信息,请你计算 T 时刻时有多少外卖店在优先缓存中。输入第一行包含 3原创 2021-04-14 10:07:36 · 414 阅读 · 2 评论 -
数列重组(next_permutation函数和is_sorted函数用法)题解
题目描述小明同学最近喜欢上了排列组合,但是现在有这样的一道题把他难住了,已知有一组数字(2,5,3,6,3,6,7,3,7,8)共10个,对于这组数字进行排列后,可以将排列好的数字分为三个部分,且三个部分都是分别有序的(升序或逆序),小明想知道能够有满足条件的多少种排列方式?输入描述无输出描述无备注例如对于重新排列后的一种序列(2, 3, 3, 3, 5, 6, 6, 7, 7, 8)可以分为(2)(3,3,3)(5,6,6,7,7,8)三组或(2,3,3)(3,5,6,6)(7原创 2021-04-13 22:18:58 · 256 阅读 · 0 评论 -
Ducky Debugging(字符串输入)题解
题目描述:You don’t know anything about programming, but nonetheless you and your friend Bob joined the BAPC. Bob just submitted a solution to a problem, but sadly his submission was not accepted. You will help him fifigure out what mistake he made. In order原创 2021-04-13 21:26:19 · 166 阅读 · 0 评论 -
斐波那契(大数定义和输出)题解
题目描述:小明最近痴迷于斐波那契数列(1,1,2,3,5……),但是最近他又有了新的奇思妙想,就是对于斐波那契数列的相邻的两个数相乘取倒数然后将每一项进行相加,由于小明只喜欢思考不喜欢动手,所以现在他想让你帮他算下这样一个新的数列的前13项的和为多少?(结果用分数表示,且保留最简分数)输入描述:无输出描述:无备注:例如前三项:1/(1*1)+1/(1*2)+1/(2*3)=5/3思路:根据题意模拟过程,注意结果会很大,每次计算之前都要对分子分母通分,防止数据溢出。或者使用原创 2021-04-13 21:10:14 · 233 阅读 · 0 评论 -
小明的作业(STL容器的使用)题解
题目描述小明同学正在学习一种新的语言。在该语言中,如果出现了一次wa或者一次aw,则代表出现了一个警告。如果出现了连续的wa或者连续的aw,则代表出现了一个错误。小明由于学习比较粗心,所以他想要知道自己刚刚写完的作业中一共出现了多少处警告和错误。下面是小明刚刚写完的作业,请你帮助小明找到他一共出现了多少次警告和多少次错误。abcwaawawawa中出现了一次警告(wa)和一次错误(awawaw);abcdefg中没有出现一次警告和错误;waawwaawwawa中出现了四次警告(两次wa和两次原创 2021-04-13 16:49:39 · 259 阅读 · 0 评论 -
乐观悲观我(字符串方法)题解
题目描述经典的半杯水问题,告诉了我们乐观的人和悲观的人看到的东西都是不同的。比如这里有一个字符串”WAC”,乐观的人能看到AC,而悲观的人只觉得自己WA了。不过可惜的是如果WA单独出现,那么乐观的人也只能看到WA了。但如果AC单独出现的话,悲观的人也能看到AC了!好耶!现在有一个长长的字符串。请你数出乐观的人和悲观的人分别看到的AC和WA的数量。输入输入只有一行字符串,长度不大于200000,这个字符串只包括W,A,C三种字母,均为大写。输出..原创 2021-04-09 08:10:13 · 271 阅读 · 1 评论 -
奇妙数字(数论)题解
题目描述让将F(x)定义为其数字的阶乘积。例如,F(124)=1!*2!*4!=48首先,选择一个由n位数字组成的十进制数字a,该数字至少包含一个大于1的数字。该数字可能以前导零开头。然后,他们应该找到满足以下两个条件的最大正数x:1. x既不包含数字0也不包含数字12. F(x)=F(a)输入第一行包含一个整数 n(1≤ n≤15)第二行包含一个数字a,其中至少有一个大于1的数字,数字a可能包含前导零。输出输出一个整数,此数字不能包含0和1样例输入4132.原创 2021-04-08 09:20:06 · 353 阅读 · 0 评论 -
矩阵排序(hard version(数据量大))(稳定排序)题解
题目描述给你一个大小为n*n的矩阵,你需要对这个矩阵进行q次排序。每一次排序会给你一个数 bi,你需要将当前矩阵的行按照第bi列的数进行稳定排序(稳定排序是指排序时相同的值的相对顺序不发生改变)比如矩阵4 5 61 2 33 2 7如果按照第二列(5,2,2)进行排序的话排序结果为1 2 33 2 74 5 6输入第一行n(1<=n<=1000)第2到n+1行为输入的矩阵,每行n个数,(1<=aij<=1000000)a11 , a12 ... a原创 2021-04-08 09:01:39 · 350 阅读 · 0 评论 -
小煜很快(题解)
题目描述小煜很快,“358团,谁不知道我是快枪手”,他经常这样说道。他想和你玩个经典的游戏:将小球用几个杯子盖住然后随机交换位置,再让你猜球在哪个杯子里。当然因为小煜很快,他将不再使用3个杯子,而是使用n个杯子,小球也不止一个。他将进行m次交换。同时因为他很快,他能在一瞬间移动k个杯子。你尽力去跟上他的思必得,不过很可惜,你没能猜中小球的位置。不过没关系,你决定痛定思痛,总结经验,下次赢回来。你现在知道了所有交换后的小球的位置,并向小煜问来了所有的交换情况。现在你想反推出一开始小球的位置。输入原创 2021-04-08 08:44:39 · 264 阅读 · 1 评论 -
线段覆盖(题解)
原题题目描述有一段道路,长度为1e18,现在有n个人对其进行刷漆,每个人会随意选取一段道路进行刷漆,每个人会从li刷到ri,包含li和ri求被刷了k次的道路的段数,k∈[1,n]输入第一行一个整数n,1<=n<=2e5;接下来n行,每行一两个整数,l,r。0<=l<=r<=1e18;输出n个整数,用空格隔开,分别表示被刷i次的路段的个数。1<=i<=n;样例输入40 42 53 61 8样例输出3 2 2 2原创 2021-04-07 17:55:53 · 1304 阅读 · 1 评论 -
矩阵排序之稳定排序(结构体数组排序)题解
矩阵排序(easy version)时间限制: 1 Sec内存限制: 128 MB题目描述给你一个大小为n*n的矩阵,矩阵里每个数均不相同,你需要对这个矩阵进行q次排序。每一次排序会给你一个数 bi,你需要将当前矩阵的行按照第bi列的数进行稳定排序(稳定排序是指排序时相同的值的相对顺序不发生改变)比如矩阵4 5 61 2 33 2 7如果按照第二列(5,2,2)进行排序的话排序结果为1 2 33 2 74 5 6输入第一行n(1<=n<=200)第2..原创 2021-04-04 09:25:04 · 336 阅读 · 0 评论 -
方格取数(动态规划)题解
题目描述:设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。某人从图的左上角的AA点出发,可以向下行走,也可以向右走,直到到达右下角的BB点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从(0, 0)点到(n,n)点共走两次,试找出2条这样的路径,使得取得的数之和为最大。输入格式:输入的第一行为一个整数N(表示N×N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。如原创 2021-04-01 11:23:36 · 931 阅读 · 0 评论 -
最低通行费(动态规划)题解
描述一个商人穿过一个 N*N 的正方形的网格,去参加一个非常重要的商务活动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而在经过中间的每个小方格时,都需要缴纳一定的费用。这个商人期望在规定时间内用最少费用穿越出去。请问至少需要多少费用?注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。输入第一行是一个整数,表示正方形的宽度N (1 <= N < 100);后面 N 行,每行原创 2021-04-01 11:14:04 · 537 阅读 · 0 评论 -
摘花生(动态规划)题解
题目Hello Kitty想在如下图的花生地里摘花生(从西北角进去,东南角出来)。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。输入格式第一行是一个整数T,代表一共有多少组数据。接下来是T组数据。每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。每组数据的接下来R行数据,从北向南依次描述每行花生苗的原创 2021-03-29 14:23:51 · 1551 阅读 · 0 评论 -
TRUNC函数
TRUNC函数的用法TRUNC函数用于对值进行截断。用法有两种:TRUNC(NUMBER)表示截断数字,TRUNC(date)表示截断日期。(1)截断数字:格式:TRUNC(n1,n2),n1表示被截断的数字,n2表示要截断到那一位。n2可以是负数,表示截断小数点前。注意,TRUNC截断不是四舍五入。SQL> select TRUNC(15.79) from dual;TRUNC(15.79)15SQL> select TRUNC(15.79,1) from dua原创 2021-03-20 20:51:56 · 15746 阅读 · 0 评论 -
判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路定义:约数只有1和本身的整数称为质数/素数。1)直观判断法最直观的方法,根据定义直接判断从2到n-1是否存在n的约数即可。C++代码如下:bool isPrime_1(int num){ int tmp = num- 1; for(int i = 2;i <= tmp;i++) if(num % i == 0) return 0; return原创 2021-03-13 16:56:18 · 705 阅读 · 0 评论 -
大数求余——快速幂推理过程
大数求余——快速幂推理过程打包的快速幂函数:流行版:int mod_exp(int a, int b, int c) //快速幂取余a^b%c{ int res, t; res = 1 % c; t = a % c; while (b) { if (b & 1)//b的二进制和1的二进制进行位的按位与运算,其实等价于if(b%2==1)起到判断奇偶的功能,但计算机的位运算比较快。 {原创 2021-01-03 11:06:28 · 934 阅读 · 0 评论