自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ACwing217. 绿豆蛙的归宿 218. 扑克牌

期望DP

2022-10-31 22:41:46 136 1

原创 AtCoder Beginner Contest 274E - Booster

状压旅行商问题ATC

2022-10-25 21:28:39 162

原创 D. Paths on the Tree

CF

2022-10-17 19:42:15 190

原创 D. Caesar‘s Legions

CF

2022-10-13 20:00:43 136

原创 Codeforces Round #407 (Div. 1)C. The Great Mixing

CF

2022-10-13 17:59:48 89

原创 CF-C. Dima and Salad

CFdp

2022-10-12 20:46:17 119

原创 Educational Codeforces Round 83 (Rated for Div. 2)E. Array Shrinking

CF

2022-10-10 20:55:07 83

原创 Codeforces Global Round 1D. Jongmah

CF

2022-10-10 19:42:26 141

原创 单链表,双链表,栈,队列,KMP

单链表:idx相当于地址,通过idx访问e[N]数组中的值​// head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点int head, e[N], ne[N], idx;//初始化void init(){ head = -1; idx = 0;}//向表头加入xvoid add_to_head(int x){ e[idx] = x; ne[idx] = head; head = idx;

2022-02-11 20:30:39 86

原创 双指针运算,离散化,区间合并

双指针运算:找到指针移动的单调性,明确i,j的定义​for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; 或者:while (j >= 0&& check(i, j))j --; 需要根据具体问题的逻辑,找到指针移动单调性,从而设计指针移动方式}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2)

2022-02-07 21:58:13 69

原创 高精度与前缀和,差分

高精度加法:vector<int>add(vector<int>&a,vector<int>&b){ vector<int>c; int t=0;//表示进位 for(int i = 0;i <= a.size()-1||i <= b.size()-1; i++ ) { if(i<a.size())t+=a[i]; if(i<b.s

2022-02-03 14:45:34 333

原创 排序和二分模板

快排: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); do j -- ; while (q[j] > x); if (i < j)

2022-01-30 20:28:23 52

原创 大一acmer日常记录day23:bfs最短时间 快速线性筛

洛谷p2895:bfs# include <bits/stdc++.h>using namespace std;struct node{ int x; int y; int time;}p;int mp[305][305],vis[305][305];//陨石掉落时间地图,访问标记地图int m,nx,ny,t;int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1};//方向数组queue<node>q;v.

2022-01-30 20:27:14 498

原创 大一acmer日常记录day21 dfs和bfs

洛谷p1219:搜索+回溯思路:用三个数组分别表示皇后所占,行,左下到右上对角线,右下到左上对角线,再用搜索加回溯即可,注意:对每一个左下到右上对角线,i+j=定值,对每一个右下到左上对角线,i-j+n=定值代码:#include <bits/stdc++.h>using namespace std;int a[1000],b[1000],c[1000],d[1000];//行,列,左下到右上,右下到左上int n,ans;void print(){ for.

2022-01-23 16:11:47 142

原创 大一acmer日常记录day20:二分答案

洛谷p2678:经典二分答案思路:明确答案在固定区间内,二分最短距离,对一个最短距离来说,该值最大所要移走的石头则越多,从而知道,对于区间内来说,最短距离最大值左边合法右边非法,只需要check一下判断当前最短距离是否合法。如何判断?关键在于check函数:对每个最短距离来说,当他是最短距离时所需要移走石头数量判断当前最短距离是否合法,数量超过限制就非法,对相邻两块石头来说,如果距离小于当前最短距离,则移走右边这块,因为移走右边这块可以使得下一个石头与上一块未移走的石头间距更大,相当于减少了石.

2022-01-21 18:22:52 653

原创 大一acmer日常记录day19

洛谷p1873:二分答案思路:首先明确符合得到木材至少为M米的答案有多种,当H最大,在升高H则不符合题意,而减小H会使得到木材进一步增多,从而知道,答案在一个单调区间内,显然答案在区间0-a.max,考虑二分答案代码:# include <bits/stdc++.h>using namespace std;typedef long long ll;ll m,n,a[1000005];ll i;bool check(ll ans){ ll sum=0;

2022-01-03 18:15:00 213

原创 大一acmer日常记录day18

链表初学:创建链表,遍历链表。若从第i各位置遍历链表,默认头指针指向数据域为0位。while(i--) { t=t->next; }代码:# include <stdio.h># include <stdlib.h>struct node { int data; struct node *next;};//结构体储存结点int main (){ struct node *head ,*p,*q,*t;

2022-01-02 22:19:40 185

原创 大一acmer日常记录day17

洛谷p1478:方法1:贪心,方法2:动态规划贪心:每次取耗费体力最小的动态规划:背包​洛谷p1478:方法1:贪心,方法2:动态规划贪心:每次取耗费体力最小的代码:# include <bits/stdc++.h>using namespace std;struct man{ int x; int y;}apple[5005];bool cmp(man a,man b){ if(a.y<b.y)return 1;...

2021-12-30 00:47:00 461

原创 大一acmer日常记录day16

洛谷p1090:优先队列思路:贪心的每次合并最小的两个堆代码:# include <bits/stdc++.h>using namespace std;priority_queue<long , vector<long>, greater<long>>q;int main (){ int n,x; scanf("%d",&n); for(int i=1;i<=n;i++) { ...

2021-12-24 14:23:11 458

原创 大一acmer日常记录day15

洛谷p1498:递归三部分思路:对于一个大图形分解三个小图形,递归处理这三个小图形,当n为一时打出最小图形,开始回退,利用每个大图形的'/'划分为三部分,即三个递归入口代码:# include <bits/stdc++.h>using namespace std;char mp[1030][2050];int n;void dfs(int x,int y,int deep){ if(deep==1)//深度等于一时在字符数组中储存答案并返回 { ...

2021-12-23 01:17:50 688

原创 大一acmer日常记录day14

洛谷p1228:经典分治思路:将当前迷宫分为四个部分,判断公主在哪个部分,考虑当前迷宫的中心2*2矩形,即四个部分的四个角构成的矩形,用地毯覆盖除公主所在部分的另外三个方格,这样一来,四个部分都存在“公主”,即将原问题转化成了四个独立子问题,在对四个子问题同样处理继续转化,当分解到子问题为2*2矩形时,用地毯覆盖另外三个点,继续分解发现分解不了,回退,即ac该题代码:# include <bits/stdc++.h>using namespace std;typedef l.

2021-12-21 22:52:08 66

原创 大一acmer日常记录day13

洛谷p1010:思路:每次找到小于n的最大2^i,递归处理。将n减去上次最大2^i,重复处理。代码:# include <bits/stdc++.h>using namespace std;int n;int pow1(int a,int b){ int sum=1; for(int i=1;i<=b;i++) { sum*=a; } return sum;}void print(int x){...

2021-12-21 00:25:13 57

原创 大一acmer日常记录day12

洛谷p3612:思路:注意到n<=10^18,显然无法正常模拟,从前往后推无法实现。考虑从后往前推,将n的位置不断改变,当n<=字符串长度即可输出。n的改变方法:观察发现字符串先复制最后一个字符在从第一位复制到倒数第二位,假设n在长度为L字符串中,将该字符串从中间切割,判断n是否等于L/2+1,若是,则n=L/2,否则n=n-L/2-1,舍弃当前字符串后半部分,即回退到上次旋转,当n<=原始字符串长度即可输出。实现代码:循环:# include <bits/s

2021-12-19 23:35:21 55

原创 大一acmer日常记录day11

dp洛谷1164:思路一正常递归://dp解决#include <bits/stdc++.h>using namespace std;/*int read(){ int k; scanf("%d",&k); return k;}*/int f[105][10005];//定义f[i][j]为对前i种物品用光j的钱的方案数量int m,n;int a[105];int main (){ scanf("%d%d",...

2021-12-17 16:01:35 88

原创 大一acmer日常记录day10

高精度加法+dp:洛谷1255数据很大,利用高精度加法实现代码:#include <bits/stdc++.h>using namespace std;int dp[5005][5005];int len=1;//表示位数void hp(int k)//k:楼梯阶乘{ for(int i=1;i<=len;i++) { dp[k][i]=dp[k-1][i]+dp[k-2][i]; } for(int i=1;...

2021-12-17 00:38:18 62

原创 大一acmer日常记录day9

catalan数:求n个数入栈后出栈的排列总数C0=1;Cn+1=2(2n+1)/(n+2)Cn;例题:洛谷p1044实现代码:#include <bits/stdc++.h>using namespace std;int main (){ int n; double sum=1.0; scanf("%d",&n); for(int i=1;i<n;i++)//i表示:有i+1个数时的排列总数 { ...

2021-12-15 15:51:54 102

原创 大一acmer日常记录day8

unique函数:去重使用前先排序#include <bits/stdc++.h>using namespace std;int num[1000],n;int main (){scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&num[i]); } sort(num,num+n); n=unique(num,num+n)-num...

2021-12-11 21:17:36 292

原创 大一acmer日常记录day7

洛谷P2241:思路:正方形个数边长为1 个数n*m边长为2 个数(n-1)*(m-1)边长为3 个数(n-2)*(m-2)所以 边长为min{n,m} 个数(m-min{n,m}+1)*(n-min{n,m}+1)长方形加正方形个数total=(1+2+3+…+n)*(1+2+3+…+m)=((1+n)*(1+m)*n*m)/4长方形个数上面两式相减即可得出所以思路就是 先算出正方形个数 然后用公式得出长方形和正方形个数总和 最后得到长方形个数代码.

2021-12-10 00:56:03 413

原创 大一acmer日常记录day6

快速排序:思想:应用二分思想,确定一个基准值,使得基准值左边小于右边,通过递归调用实现数组元素排序实现代码:void qsort(int l,int r)//应用二分思想{ int mid=a[(l+r)/2];//中间数 int i=l,j=r; do{ while(a[i]<mid) i++;//查找左半部分比中间数大的数 while(a[j]>mid) j--;//查找右半部分比中间数小的数 if(i&l...

2021-12-02 01:20:00 77

原创 大一acmer日常记录day5

动态规划:

2021-12-01 01:26:09 365

原创 大一acmer日常记录day4

插入排序:思想:假定数组中第0位已经排好序,从第1位开始判断是否比前一位大,大于的话就让前一位覆盖后一位,直到目标元素不大于往前的元素,即数组中空出了一位,将之插入,依次进行后续的插入排序。实现代码:for( i=1;i<n;i++) { int j=i-1; int v=num[i]; while(j>=0&&v<num[j]) { num[j+1]=num[j]; j--; ...

2021-11-30 00:53:25 378

原创 大一acmer日常记录day3

递归:对递归的理解:从最上级往最下级递归,每一级都调用了下一级,当到最下级的时候也就是递归出口,最下级返回一个实际值,而次级又调用了该级,意味着次级有了一个明确的值,即返回一个实际值,同理,每上一级都调用了下一级,意味着每上一级都有了一个明确的值,到最上级的时候即可返回一个实际值,得到答案,结束递归。递归总结:1.明确用递归拿来干什么2.找到递归出口,意味着次级可返回一个实际值3.找到关系式,使得递归能够进行,即上一级调用函数下一级的函数,下一级返回了一个实际值,使得上一级也能够返回一个

2021-11-29 01:11:57 141

原创 大一acmer日常记录day2

今天初步了解了二维前缀和与差分,之前学过一维前缀和与差分,感觉算法好难阿,昨天二分查找还没整明白,人都麻了。进入正文:二维前缀和:预处理for(inti=1;i<=n;i++) { for(intj=1;j<=m;j++) { sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]; } 求矩阵(x1,y1)到矩阵(x2,y2)差值:su...

2021-11-25 01:53:47 386

原创 大一acmer日常记录day1

感觉得在学习算法的同时写出自己的理解,遂开始写日常;1.今天学了下二分查找2.理解:first:区间左闭右闭,维护左右都合法更新left=mid+1,right=mid+1;循环条件:left<=right;second:区间左闭右开,维护左合法右非法更新left=mid+1,right=mid;循环条件:left<right;...

2021-11-23 00:50:45 203

空空如也

空空如也

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

TA关注的人

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