自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 codecorces #782 E

题意,给出n个点,m条边.定义mex(wi,wi&wi+1,wi&wi+1&wi+2)为从u,到v的边权,给出q个查询,给出两个点之间的边权。容易发现012只可能同时存在两个,所以答案只在这三个数之间,因为如果存在1,就说明最后一位一定为1,就不可能通过与得到一个偶数,只能得到0如果存在2,那么最后一位一定为0,就不可能得到奇数,只能得到0.#include<bits/stdc++.h>using namespace std;const int ma

2022-04-19 22:33:59 160

原创 单调栈的引入

我是怎么引入这个单调栈的呢,我是先想的是求一个直方图中的最大矩形,然后是简化这个模型,我假设这个直方图是有序的,那我会怎么求呢。我是会选择从高的矩形往低的矩形求,每次求出当前高度最低的矩形的面积和上一个矩形的面积的大小取较大的即可,那可以看出,这个的要求是在有序的情况下,从高往低更新矩形大小,那么可以看出,矩形的大小最终是由一个区间矩形最低高度和最长宽度乘积(区间长度为1-n)那么解决方法是什么呢:首先,从高的往低的选择,每次往前选择矩形,都要更新所求矩形的最大值(在上一次的面积,和从n-i最低矩形

2021-07-30 18:26:46 127

原创 B2. Wonderful Coloring - 2题解

#include<bits/stdc++.h>using namespace std;#define ll long long#define ull unsigned long long#define std std::ios::sync_with_stdio(0)#define mem(a,b) memset(a,b,sizeof(a));#define P pair<int,int>const int INF = 0x3f3f3f3f;const int ma.

2021-07-26 16:50:08 585

原创 P2054解题报告

为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动。由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间。玩了几局之后,大家觉得单纯玩扑克牌对于像他们这样的高智商人才来说太简单了。有人提出了扑克牌的一种新的玩法。对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠的第二张,再取下面一叠的第二张作

2021-07-22 00:51:23 342 3

原创 分治 归并排序和逆序对

板子传送门对于归并排序,是一种O(n*logn)的一种排序方法,然后归并排序中没有一出现,全部都是l因为他的出发点不一定是 1(当排序右边的时候),对于该次所排序的左右区间,在左右区间的两端的元素分别有序,因为是用的递归,所以是从小区间往大区间来排序的,所以该区间分成的两个区间是一定有序的。#include<bits/stdc++.h>using namespace std;int a[1000],temp[1000];void midsort(int l,int r){

2021-07-20 17:12:18 105

原创 搜索剪枝。Scales S详解

传送门,题目大意:有一串不递减序列的序列砝码(从第三个开始,每个砝码质量最少是前两个砝码的和),要求用天平秤重,给出天平的最大承重量,砝码数量和砝码的重量,求最大的称量数。思路:求最大称量数就相当于求多少个数拼成一个最大的数,那就可以用到从大到小的挑选(优化一),如果大的这个可以。前面一定有砝码可以凑成这个大的数,而我们直接选这个大的数的话,就不用再搜索了,然后对于从后往前面选的话,可以再进行一次优化,如果已经选择的砝码的质量加上再选择第i个砝码加上之前所有的砝码的质量小于最大承重量的时候,我们

2021-07-16 22:09:12 331

原创 对于c++输出格式的控制

对于要求输出宽度和左对齐或者右对齐我们选择使用setw()函数(默认是右对齐)和left以及right来达成输出条件,例如:左对齐,宽5格cout<<left<<setw(5)<<s;这样即可,对于setw(n),就是限定输出只能有n位数,当后面的s位数大于n的时候,setw()函数自动失效,然后有一个setfill函数,当我们要在对其的同时输出额外的符号来填充的时候就可以使用,然后对于输出保留小数:控制输出位数函数setprecision(n)..

2021-07-16 12:01:40 1219

原创 数字快读,详解

今天有个题一直tle,改了好几遍算法,从最开始的优先队列,变成了,双队列来降低时间复杂度都失败了,还是tle,最后还是走上了写快读函数的路,记得最开始学的时候都很好奇是什么东西,感觉好厉害的样子,可是现在我宁愿用不到,哈哈哈。上代码:void read(int& x){ int f = 1; //f为符号位 x = 0; char s = getchar(); //读入一个字符 while (s > '9' || s < '0')

2021-07-16 00:40:03 194

原创 二分小结、

首先是两种整数二分的板子1.也可以是找到右边区间的最左边一个数ll l = 0, r = n - 1; //只要[l,r]覆盖得了目的区间即可while (l < r){ int mid = l + r >> 1; if (a[mid]>=x) r = mid; //把下一个mid往左抬, else l = mid + 1; //把下一个mid往右抬,}为什么是l=mid+1,而不是l=mid..

2021-07-15 18:42:13 161

原创 对于sort和两个二分函数

sort函数:在c++中是比较常用的函数,可以直接对数组进行排序,还有结构体排序,不过对于结构体排序需要重载一下比较函数,sort使用形式是sort(开始得地址,结束得地址+1,比较函数cmp(可以省略,如果省略就是默认排序,从小到大)),假设sort(a,a+n),就是从a[0]开始排序到a[n-1],最后排序出来的结果就是从小到大,如果想要从大到小,需要加上一个自己写的比较函数cmp例如:int a[1000];int cmp(int a, int b){ return a > b

2021-07-09 20:23:30 83

原创 POJ-3414详解,还有简单的翻译

题意:输入a,b,c,分别代表1容器的容量,2容器的容量,经过变化后的某一容器剩下的水的容量,有三种变化。1.把某个瓶子装满,2.把某个瓶子里面的水都倒掉,3.把某个瓶子a里的水倒往另外一个瓶子b,(直到另外一个瓶子b被倒满或者是某个瓶子a被倒空)。输出最少变化次数,并且输出过程。如果不能到达输出impossible.思路:因为是最短路,而且是搜索专题中的,因为是最短路,而且是有多个方向,所以选择用BFS;然后用一个二维数组str来存过程的字符串,并且用pre保存父节点以便于递归输出过程的时候使用找到最

2021-07-09 10:35:59 478

原创 对于素数筛法的复习

一般的埃氏筛int vis[maxn]void shai(){ memset(vis, 0, sizeof(vis)); vis[1] = 1; for (int i = 2; i< maxn; i++) //不包括maxn { if (!vis[i]) { for (int j = 2; j * i < maxn; j++;) //一开始写的for(...

2021-07-08 19:18:07 86

原创 BFS的小结

前天学习到了BFS,我一开始对于BFS还是不太想学的,因为我觉得BFS能解决的话,DFS也是能解决的,后来发现并不是,对于不太深的遍历,BFS比DFS快的多,尤其是对于最短路,的时BFS第一次就能直接得到答案的,然后,然后就学了BFS;void BFS(){ 初始化; int head = 0; tail = 1; //int pre[tail] = head; while (head < tail) { head++; for (int i = 0; i < max

2021-07-07 23:33:07 173 1

原创 2021-07-06比赛小结

#include<bits/stdc++.h>using namespace std;char a[100][100][100];char a1[100][100][100];int n1, n2, n3;int sx, sy, sz;int dx[6] = { 0,0,-1,0,1,0 };int dy[6] = { 0,0,0,1,0,-1 };int dz[6] = { -1,1,0,0,0,0 };int tx[30000], ty[30000], tz[30000];

2021-07-07 23:11:03 171 1

原创 POJ3279题解报告

传送门:P6201 [USACO07OPEN]Fliptile S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题目大意:给一个n*m的01矩阵,每次翻动某个矩阵的时候也会翻动有相邻边的值,即上下左右和其本身的值都会改变,求在翻动次数最少并且在字母序最小的情况下,翻动次数的矩阵,第i行第j列的数表示翻动该矩阵的次数,如果无解,输出IMPOSSIBLE.思路:枚举出翻动第一行的所有情况(2的m次方)然后在这种情况下认为每个的值只受下一行的影响(其实还是受旁边的值的影响的,但是因为a

2021-07-06 00:06:22 323 2

原创 对于<<和>>在位运算中的一些理解,以及与求奇偶的原理,还有c++加快存储输出的一些小技巧

1.对于左移位运算:例如一个八位二进制数:00000111(7)<<2就会得到00011100(28),即把整个二进制数往左边移动两位,低位空缺补0,也可以看作两次乘以二,7*2*2=28;对于左移还可以使用左移运算符代替pow(2,n)来求得2的n次方的值,即1<<n;例如:n=3;可以看作三次乘以2.则有1*2*2*2=8;2.对于右移位运算:例如一个八位二进制数:00000111(7)>>2 就会得到00000001(1),即.

2021-07-05 15:25:06 114

原创 对于dijkstra最短路的一些浅显的理解,希望能帮到大家

#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<algorithm>using namespace std;#define P pair<int,int> //pair是一个模板类,含有两个成员数据,const int maxn = 1e5+5;struct tree{ int to, w;};ve...

2021-06-12 16:19:49 112 4

空空如也

空空如也

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

TA关注的人

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