自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 济南大学202204(汉诺塔递归)

思路2:二叉树问题,把整棵树分成根节点、左子树、右子树这样简单的一棵树,然后想一棵树的话这个问题应该怎么解决。思路1:要从1和n - 1的角度进行考虑,把整个问题n分成1和n - 1, 然后考虑这个问题应该怎么解决。递归是递推到最后一层,真正开始解决问题是从最后一层开始,逐层回归。把问题抽象,不要一步一步的想。

2023-03-20 22:49:36 125

原创 指针 指针数组 数组指针 二级指针 到底怎么指向?

指针

2023-03-17 00:30:38 302

原创 leetcode二维指针

leetcode

2023-03-13 23:12:02 85

原创 sprintf sscanf

c

2023-03-01 22:47:44 57

原创 qsort

qsort

2023-03-01 20:20:19 38

原创 c语言指针(结构体)

c结构体指针

2023-02-26 23:21:31 581

原创 广东省赛补题_G

newcodeB分2相当于自杀,B分一个2(1,1),A就拿一个1,B把2拿没了,A伴随着B的愚蠢行为获胜了。博弈论的游戏观察能否一个伴随一个走,如果一个伴随一个走,那么一个就必死#include<bits/stdc++.h>#define ll long longusing namespace std;int n;ll cnta,cntb;int main(){ ios_base::sync_with_stdio(0); cin.tie(0),cout.ti

2021-08-04 19:42:28 108

原创 广东省赛补题_J

lijie从哪到哪,并且需要最值,考虑bfs应用bfs:扩展的时候权值如果都是一样的,那么一定可以用bfs,反之不可以用。bfs重要特性就是,可以最优到最优,原理就是:next=最优+权值,而所有状态权值都是一样的,所以只要最优,那么就可push进队。在本题中,权值是1,也就是每扩展一次,步数+1。对哪个状态来说,只要扩展一次,步数都是+1,所以权值是相同的,为1。ps:对于迷宫找出路问题,每扩展一步,步数+1,是一个道理。但是bfs对于有权值的图,就不能用了,因为:next=最优+权值,各

2021-08-04 18:40:04 85

原创 广东省赛补题_D

lianjie注意设置标志的妙用,在重复判断边界中,设置一个越界岗哨可以避免重复的判断。把越界位置根据题意设置成inf,就不用一次次的判断#include<bits/stdc++.h>#define ll long longusing namespace std;int n;const int N=5e5+100;const int inf=1e9;ll a[N];ll Max_val=-1;int ans[N]; //答案数组,存下标int main(){

2021-08-04 16:40:53 76

原创 2018湖南省赛_B

newcodedfs的时候,先想搜的是什么。1.规定——每次都搜待搜索的点2.dfs进去后先写边界条件3.还原现场#include<bits/stdc++.h>#define ll long longusing namespace std;const int N=100,Mod=1e9+7;int cnt=0;int num[5]={0,2018,1009,2,1};int a[N][N];int ans[N][N];int dp[2002][2002];int

2021-08-01 16:27:03 82

原创 十一届山东省赛补题_H(二维费用背包)

newcode三维:要从头跑到尾,才能把整个dp更新完整,不然dp更新不完整#include<bits/stdc++.h>#define ll long longusing namespace std;int n,H,S;ll h[1010],s[1010],w[1010];ll dp[1005][305][305];int main(){ ios_base::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin

2021-08-01 10:40:14 69

原创 2021-07-30

长沙理工H//总的是DP的思想,前一遍dp,后一遍dp,然后枚举中间点得到最大值#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3f //int#define linf 0xffffffffff // long longusing namespace std;const int N=2e5+100;int n,k;ll a[N],pre[N],f1[N],f2[N];int main(){.

2021-07-30 15:27:55 73

原创 E平均成绩

链接//快速幂是把k展开,看哪一位是1,就乘//ans+=s*c%m erro#include<bits/stdc++.h>#define inf 0x3f3f3f3f#define ll long longusing namespace std;const int N=1e5+100;const int M=998244353;ll ans=0;ll cnt=0;int qmi(ll a,ll k){ ll res=1; while(k)

2021-07-30 10:52:58 136

原创 算法——归并排序

#include<bits/stdc++.h>using namespace std;const int N=1e5+100;int a[N],n,tmp[N];void merge_sort(int a[],int l,int r){ if(l>=r) return ; int mid=l+r>>1; //1.找临界点 merge_sort(a,l,mid),

2021-06-14 20:26:07 72

原创 逆序对——归并排序

归并排序实际上也是把序列进行了分块,二分分块。树状数组也是分块。先分再合。分到底的序列就是原序列#include<bits/stdc++.h>#define ll long long using namespace std;const int N=1e5+100;int a[N],n,tmp[N];ll sum=0;void merge_sort(int a[],int l,int r){ if(l>=r) return ; int mid=

2021-06-14 20:24:51 156

原创 算法——快速排序

#include<bits/stdc++.h>using namespace std;const int N=1e5+100;int n,p[N];void quick_sort(int q[],int l,int r){ if(l>=r) return ; int i=l-1,j=r+1,x=q[l+r>>1]; while(i<j) { do i++;while(q[i]<x); .

2021-06-14 12:29:08 58

原创 连通块

邻接矩阵表示的图:油田dfs#include<bits/stdc++.h>using namespace std;const int maxn=104;char G[maxn][maxn];int n,m;int ans=0;int x[8]={0,0,-1,1,1,1,-1,-1};int y[8]={-1,1,0,0,-1,1,1,-1};int flag[maxn][maxn];void dfs(int h,int l){ for(int i=0;i&

2021-04-28 20:55:25 128

原创 auto

#include<bits/stdc++.h>using namespace std;#define ll long long#define bug(a) cout<<"# "<<a<<" ";#define bug2(a,b) cout<<"# "<<a<<" # "<<b<<endl;#define bug3(a,b,c) cout<<"# "<<a<&l

2021-04-25 17:25:07 54

原创 STL——priority_queue

操作top()push()pop()size()empty()swap() 清空队列可通过swap 也可通过赋值清空。优先队列优先级有greater< int >, less< int >访问元素只能一个一个地访问头 (while)不能访问尾元素非常受限制,建议:如果不是在插入时要求按降序排列,就用vector,vector可以做到他能做的一切除了插入时降序排列(也可能我还不会,求大佬指点)#include<bits/stdc++.h&.

2021-04-25 16:38:53 152

原创 STL——vector

#include<bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define eps 1e-10#define bug(a) cout<<"# "<<a<<endl;#define bug2(a,b) cout<<"# "<<a<<" # "<<b<<endl;#define b.

2021-04-25 15:35:54 60

原创 STL——queue

queue的操作就以下:FIFO:先进先出:push() 把一个元素压到队尾pop() 把队首元素弹出front() 访问队首元素back() 访问队尾元素size() 返回队列元素个数empty() 返回队列是否为空,空返回1#include<bits/stdc++.h>#define bug(x) cout<<"#"<<x<<endl;#define bug2(a,b) cout<<"#"<<a<.

2021-04-25 14:15:20 68

原创 字符串的读入

可读空格:cin.get();cin.getline();gets();getline(); 前三istring流 最后一个string流#include<bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define bug(x) cout<<"#"<<x<<endl;#define bug2(a,b) cout<&.

2021-04-24 22:02:22 814

原创 STL——string

以下代码配合该大佬博客食用#include <iostream>#include<bits/stdc++.h>using namespace std;void test1(){ string a; string b("asdf"); string c="adfasdf"; string d=c; string e(3,'e'); cout<<a<<endl; cout<<b<

2021-04-12 20:27:23 47

转载 数轮(3)中国剩余定理及求解模线性方程组

TQL移步大神讲解POJ1006AC:#include <iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#define ll long long#define INF 0x3f3f3f3f#define EPS 1E-10using namespace std;void exgcd(int a,int b,int

2021-04-06 21:28:20 108

原创 数论(2)逆元

一、逆元理解逆元是什么?逆元就是扩大了概念的倒数。定义:如果 ax≡1(mod M),就称x为在模M下 a的 逆元!简单地说,如果一个数x满足 ax%M=1,那么x就称为在模M下 a的 逆元!为什么说是扩大了概念的倒数呢,可见比起以前的倒数,只加了一个条件,即在后边加了一个 “%M",也可以这样理解,我们以前的倒数,也有这个条件,不过M是1。二、逆元用处有时候结果会让取模,除法只能用逆元取,如下:(a/b)%M=(ainv[b])%M=(a%M)(inv[b]%M)%M三、方法

2021-04-06 21:21:04 4954

原创 数论基础(1)扩展欧几里得定理

一、引言扩欧在朴素欧几里得定理中扩展得到,主要用于解决什么问题?1.求两个数的最大公约数(朴素欧也可以解决这个问题)2.ax+by=gcd(a,b),求解这个线性不定方程的一组特解。(补充:贝祖定理:裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。它的一个重要推

2021-04-06 20:50:41 218 1

原创 完全背包

一、引入二、一维解法(推荐解法)const int maxn=5E4+100;int C[maxn],W[maxn];//花费 价值int dp[maxn*4];int V;int main(){ int n; cin>>n>>V; for(int i=1;i<=n;i++) { cin>>C[i]>>W[i]; } memset(dp,0,sizeof(dp));

2021-03-28 21:14:05 55

原创 旋转卡壳3——两凸包间距离 (POJ3608 Bridge Across Islands 详讲)

一、引言讲完了凸包,一个凸包间的距离问题,那么如果有两个凸包,求最小(或最大)距离怎么求呢?二、思路说白了,我们是求图形与图形之间的距离,我们可以转换成线段与线段之间的距离,再转换成点与线段之间的距离,最后转换成点与点之间的距离。1.点与点的距离 不解释2.点与线段的距离点与线段一共有如上三种位置关系,明显看出条件就是A与BC的角度是否是钝角,这里我们用点积判断。double point_to_line(Point A,Point B,Point C){ if(dist(B,C)&

2021-03-28 16:12:49 511

原创 旋转卡壳2——凸包距离 (POJ2187Beauty Contest 详讲)

POJ2187一、引言上节的POJ2187,是求一个凸包中的最远的两个点的距离,用暴力,O(n²)也能过,但是没有用到旋转卡壳。这节就来看看怎么用旋转卡壳来卡这个最远距离。二、找対踵点这个最远的距离肯定是在凸包上,这是毋庸置疑的,我们首先建立好凸包后,然后检索凸包的点,寻找这个点的対踵点(即,距离这个点最远的点):用什么方法寻找呢?这里借助了三角形的面积,具体如下首先从检索点0※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※(开始寻找対踵点的时候是从0点的右边一个点即点

2021-03-28 15:44:30 240

原创 旋转卡壳1——凸包

一、前驱知识:1.叉积:A×B A.x*B.y-A.y*B.x >0 A在B的顺时针方向 <0 A在B的逆时针方向2.点积:A·B A.x*B.x+A.y+B.y3.两点之间距离: 可以用点积方便的求解,即: sqrt(A.x*A.x+A.y*A.y);4.计算几何精度问题: dcmp函数,直接看注解5.计算几何问题,一般把他们打包在一起,形成以下代码:代码:struct Point{ double x,y; Point(

2021-03-28 14:59:46 197

原创 01背包

一、注释背包怎么理解呢?就是把背包的容量从0到V逐渐刷新,逐渐扩大容量,利用dp思想,先解决小容量,在小容量的基础上一步步解决大容量,直到我们需要的那个容量V例如:让求容量V=5,就先求1 2 3 4 一步步扩展过来Vdp12345二、解法①二维解法const int maxn=1010;int dp[maxn][maxn];int C[maxn],W[maxn];int N;int V;int zero_one_pack(i

2021-03-16 17:34:02 90

原创 HDU1284 硬币转换

题目链接dp[j] 表示使用的币值最大为i时 来兑换j分钱 的种数不断提高币值i的值,来刷新dp[j]的值例如: dp[5]当i=1时dp[5]=1;当i=2时dp[5]+=dp[5-2]; 即dp[5]=dp[5]+dp[3]=1+2=3; 原来的+dp[3] 当i=3时dp[5]+=dp[5-3]; 即dp[5]=dp[5]+dp[2]=3+2=5; 原来的+dp[2]#include<bits/stdc++.h>#define ll long l

2021-03-15 21:18:10 60

原创 LCS HDU1159

戳LCS 最长公共子序列关于LCStqlLCS#include<bits/stdc++.h>#define ll long long#define INF 0x3f3f3f3fusing namespace std;int c[1100][1100]; //前i 前j个元素 的lcschar a[1100],b[1100];int main(){ while(scanf("%s%s",a,b)!=EOF) //string 会WA

2021-03-15 21:07:04 54

原创 动态分配二维数组

C int **a; a=(int**)malloc(sizeof(int*)*(n+10)); for(int i=0;i<n+10;i++) { a[i]=(int*)malloc(sizeof(int)*(m+10)); memset(a[i],0,sizeof(int)*(m+10)); //动态分配的空间每行是连续的 行与行不连续 因此空间不连续

2020-12-05 09:36:55 346

原创 codeforces 484A bits

添加链接描述bitmasks太强了太强了太强了,二进制收下我的膝盖!#include<bits/stdc++.h>using namespace std;int main(){ int t; cin >> t; while (t--) { long long a, b, k; cin >> a >> b; k = a; for (int i = 0; i < 64; i++) { a |= 1ll<&l

2020-08-03 12:50:31 120

原创 codeforces C. Modified GCD

传送二分+数论数论:gcd(a,b)=公约数g1 *公约数g2 找两个数的所有公约数就可以转化成找最大公约数的约数#include<bits/stdc++.h> #define ll long long using namespace std;ll n;ll r, l, mid;ll gd;ll c[100000 + 100];ll a, b;ll gcd(ll x, ll y){ return x % y ? gcd(y, x % y) : y; }in

2020-07-27 12:24:00 143

转载 codeforces 118D

tql这种dp ,一般出现在1700 1800了,让统计方案数,特点就是出现很多维数,每一维都有含义。重要的是,分析好状态,找准状态,转移方程不难得出。切勿凭空想象,会漏掉很多方案。还有就是这类题,最后一般都有一个统计。...

2020-07-25 12:19:12 128

原创 lower_bound与upper_bound

lowe_bound(f,l,x)返回[f,l)之间第一个大于等于x的地址 没找到的话,返回l具体用法int p=lower_bound(a+1,a+1+n,x)-a; //注意减a

2020-07-17 22:26:10 88

原创 codeforces 1342C Yet Another Counting Problem

传送门题意:让求l,r之间的符合要求的数量。方法:打表找规律,这种题,10的18次方,一看就不是暴力能解决的问题,肯定有规律可循,绝大多数能找到公式,这时候暴力打表找这个规律。设前i个数中符合规律的数有dp[i]个,规律就是:a*b一个循环#include<bits/stdc++.h>#define ll long longconst int maxn=4e4+100;using namespace std;ll dp[maxn];int main(){ int t

2020-07-17 10:36:55 164

原创 codeforces 891A Pride

传送门题意:给一个序列,用相邻两个数的gcd替换其中一个数,问:最少需要几次替换能把整个序列弄成1方法:区间dp。如果序列中出现1(特判)那么整个序列都可以弄成1;如果没1,我们就要构造1(dp)设dp[x][y]:表示区间从x到y的gcd,显然,该题有解的充要条件是dp[x][y]=1有解。区间长度y-x也就是进行gcd的次数我们的答案也就是min(y-x)+n-1。状态转移方程:dp[i][j]=gcd(dp[i][j-1],a[i]); 也就是求这个序列的公共gcd,向后推着求#i

2020-07-16 10:57:44 154

期末考试aaaaaaaa

期末考试aaaaaaaa

2021-12-09

空空如也

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

TA关注的人

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