自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最大公约数与最小公倍数

文章目录题目描述思路证明nnn和n−1n-1n−1互质题目描述⼩YYY同学在学习数论之后灵机⼀动想出⼀个问题:请你找出两个数a,ba,ba,b,满⾜1≤a,b≤n1≤a,b≤n1≤a,b≤n且lcm(a,b)−gcd(a,b)lcm(a,b)−gcd(a,b)lcm(a,b)−gcd(a,b)尽量⼤。输出最⼤的lcm(a,b)−gcd(a,b)lcm(a,b)− gcd(a,b)lcm(a,b)−gcd(a,b)。其中gcd(a,b)gcd(a,b)gcd(a,b)表⽰aaa和bbb的的最⼤公约数,l

2020-09-26 07:33:01 107

原创 夏季特惠

文章目录题目描述思路代码题目描述Steam 2019Steam\ 2019Steam 2019年夏季促销开始了!⼩YYY同学决定⼊⼿⼀些游戏,⼩Y同学⼀共有xxx元的预算,该平台上所有的nnn个游戏均有折扣,标号为iii的游戏的原价aiaiai元,现价只要bibibi元(也就是说该游戏可以优惠ai−biai−biai−bi元,每款游戏最多只能购买⼀次),并且⼩YYY同学购买该游戏能获得快乐值为wiwiwi。由于优惠的存在,⼩YYY作为剁⼿党可能做出⼀些冲动消费导致最终买游戏的总费

2020-09-25 21:25:43 1780

原创 快速幂 && 快速乘

文章目录思想快速幂,一个神奇的算法。思想我们先思考一个问题:aaa的bbb次方模kkk的值。

2020-09-24 20:19:36 89

原创 并查集

文章目录储存查询findfindfind优化:路径压缩合并例题冰茶姬(Disjoint−setDisjoint-setDisjoint−set)是一个可以动态维护若干个不重叠的集合,并且支持合并和查询的数据结构。储存某大侠有许多个朋友,他会杀掉朋友的敌人,也会和敌人的敌人成为朋友。但时间一久,他就不知道面前这个人是不是朋友。冰茶姬站了出来,大声一吼:“没事,你当你朋友的祖宗!”没错,冰茶姬就是这么实现的,认祖宗!。我们定义一个数组fafafa,存储iii的祖宗是谁。分辨这个人是否是朋友,我们只需要

2020-09-24 14:00:25 87

原创 木棒

文章目录思路代码:搜索初步1传送门思路我们可以从小到大枚举原始木棒的长度lenlenlen(也就是枚举答案)。当然,lenlenlen应该是所有木棒长度中和sumsumsum的约数,并且原始木棒长度的根数cntcntcnt就等于sum/lensum/lensum/len。对于每个lenlenlen,我们可以依次搜索每根原始木棒有哪些木棒拼成。则搜索所面对的状态包括:已经拼好的根数,正在拼的木棒的长度,每根木棒的使用情况。在每个状态下,我们就从尚未使用的木棒中选一根来尝试拼。但这个算法效率比较低,

2020-09-23 21:08:31 128 1

原创 八皇后问题

文章目录题目描述样例输出:思路搜索初步1题目描述在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。样例输出:No. 11 0 0 0 0 0 0 00 0 0 0 0 0 1 00 0 0 0 1 0 0 00 0 0 0 0 0 0 10 1 0 0 0 0 0 00 0 0 1 0 0 0 00 0 0 0 0 1 0 00 0 1 0 0 0 0 0No. 21 0 0 0 0 0 0 00 0 0 0 0 0 1 00 0 0 1 0 0 0 00

2020-09-23 21:03:31 236 1

原创 特殊的质数肋骨 Superprime Rib

文章目录思路传送门搜索初步1思路这就是一个简单的DFS板题。代码1:#include <bits/stdc++.h>using namespace std;int n, sum = 1;bool o(int t) { for (int i = 2; i <= sqrt(t); i++) { if (t % i == 0) return 0; } return 1;}bool yu(int t) {

2020-09-23 20:57:11 453

原创 How Far Away?

文章目录题目描述思路代码题目描述村子里有nnn栋房屋,有一些双向道路将它们连接起来。每天,peoplepeoplepeople总是喜欢这样问:“如果我想从房子AAA到房子BBB多远?” 通常很难回答。但是幸运的是,这个村庄的答案始终是唯一的,因为道路的建造方式是每两栋房屋之间都有一条唯一的简单路径(“简单”意味着您不能两次访问某个地方)。您的任务是回答所有这些好you奇bing的人。输入格式第一行是单个整数TTT(T<=10T <= 10T<=10),表示测试用例的数量。对于每个

2020-09-23 20:48:39 369 1

原创 LCA算法 && 倍增

#include <bits/stdc++.h>#include <queue>using namespace std;int n,q,head[100005],cnt,d[100005],f[100005][105];struct node{ int to,next; }a[200005];void add_edge(int u,int v) { a[++cnt].to=v,a[cnt].next=head[u]; head[u]=cnt;}void bfs(

2020-09-23 13:23:44 525

原创 凸多边形的划分

文章目录思路代码传送门思路如上图所示,一个编号为111到666的六边形,我们考虑划分时边(1,6)(1,6)(1,6)会被哪个三角形选中,由顶点1,61,61,6构成的三角形可以是126,136,146,156126,136,146,156126,136,146,156。比如随便选取其中的一个三角形146146146,原图形就被划分为了三部分,最简单的蓝色三角形146146146,以及蓝色三角形上面的图形和下面的图形,由于划分的三角形不能交叉,所以不会存在像125125125这样会与1461461

2020-09-22 20:53:15 746

原创 烛光晚餐

文章目录思路代码传送门思路这就是一个二维费用问题。我们定义f[i][j]f[i][j]f[i][j]为前iii道菜小明的满意值为jjj的小红的满意值。所以状态转移方程式为:dp[i][j]=max(dp[i][j],dp[i−c][j−x]+y);但我们的的jjj可能小于000,也就是小明的满意值可能小于000。但我们的下标不可能小于000,所以我们需要特殊处理一下。把jjj全部右移500500500。f[j][k+500]=max(f[j][k+500],f[j-c][k-x+500]

2020-09-21 20:47:45 113

原创 ST算法 && RMQ问题

文章目录思路预处理代码(求最大值)预处理代码(求最小值)询问l−rl-rl−r最值代码【白话系列】倍增算法我们就直接讲一下RMQRMQRMQ(区间最值问题)问题。题目:求出数列aaa中下标在l−rl-rl−r之间的数的最大值是多少?(当然也可以求最小值)我们最简单的方法就是直接枚举l−rl-rl−r之间的数。但当数据过于大时,暴力就不太适合了。于是,STSTST算法应运而生。思路给定一个长度为nnn的数组aaa,STSTST算法可以能在O(N log N)O(N\ log

2020-09-21 13:46:27 96

原创 区间DP的绝世好题:Coloring Brackets(三维做法)

文章目录代码传送门代码#include <bits/stdc++.h>using namespace std;char a[10005];long long f[705][705][2],M=1e9+7;int yu(int x,int y) { int book=1,sum=0; for(int i=x;i<=y;i++) { if(a[i]=='(') sum++; else sum--; if(sum<0) return 0; if(!sum

2020-09-20 16:46:53 116

原创 小A点菜

文章目录思路代码传送门思路十分经典的一道DP题。转移方程式为:f[j]+=f[j-a[i]];我们首先定义f[i][j]f[i][j]f[i][j]表示前iii个菜品恰好花费jjj元的方案数。当我们买第iii道菜时:f[i][j]+=f[i-1][j-a[i]]当我们不买第iii道菜时:f[i][j]+=f[i-1][j]代码...

2020-09-20 15:54:03 783

原创 最长不下降子序列O(NlogN) && 输出序列

文章目录不输出序列的思路不输出序列的思路我们对于O(n2)O(n^2)O(n2)的最长不下降子序列十分熟悉了。#include <bits/stdc++.h>using namespace std;int n,ans,a[1005],f[1005];int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]),f[i]=1; for(int i=n-1;i>=1;i--)

2020-09-19 11:47:19 474

原创 传纸条

文章目录思路代码AKAKAK代码传送门思路其实就是求两条路径,我们假设两个人,一起从(1,1)(1,1)(1,1)开始走,一直走到(n,m)(n,m)(n,m)这点所经过的路径。我们就定义f(p,i,j)f(p,i,j)f(p,i,j)表示当前走了ppp步,第一个人走到第iii行,第二个人走到第jjj行的最大好心程度。我们可以通过ppp算出两个人的坐标:分别为(i,p−i+1)(i,p-i+1)(i,p−i+1)和(j,p−j+1)(j,p-j+1)(j,p−j+1)。那么状态转移方程式为:f

2020-09-17 20:52:58 137

原创 链式前向星

#include <bits/stdc++.h>using namespace std;struct node{ int to,dis,next; }a[105];int cnt,n,m,head[105];void add_edge(int u,int v,int w) { a[++cnt].to=v,a[cnt].dis=w,a[cnt].next=head[u]; head[u]=cnt;}void visit(int u) { for(int i=head[u];i

2020-09-16 13:13:10 88

原创 二分和三分

文章目录二分原理代码:三分原理代码二分二分,一个简单而神奇的算法,可以简化时间复杂度,但是用二分有一个条件,就是我们进行二分的序列必须有单调性。原理我们直接上一个栗子:从一个单调上升序列aaa中找一个数xxx(保证xxx一定存在)。我们可以用朴素算法,直接从头到尾找一遍,时间复杂度O(n)O(n)O(n)。如果当序列aaa的长度十分大时,这种方法就不好用了。二分横空出世。我们每次寻找左右边界的中间。如果这个数大于xxx,右边界就等于中间。否则,左边界就等于中间。知道找到答案。代码:

2020-09-02 20:47:45 115

空空如也

空空如也

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

TA关注的人

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