自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Anxdada -- 我等风来也等你

此博客不会维护了

  • 博客(55)
  • 收藏
  • 关注

原创 CodeM美团B轮A题 黑白树 【贪心】

题目地址思路 : 题意应该好懂. 思路就是贪心, 每次都去选择叶结点去更新, 因为叶结点始终都会去更新的, 所以我们就贪心的取叶结点去染色, 然后把叶子和它上面k-1个给染了, 继续遍历那k-1个, 如果没染染上就好了, 如果染上了,它就把它的k值减一赋给他的父亲 ,他的父亲就在他本身的k和他儿子赋给他的取个max, 因为有可能染他儿子更优, 所以对它上面那个点来说就是k-1, 我们只是去贪心的选择

2017-06-25 23:21:49 537

原创 2017年四川省赛 -- G题 2017 【容斥定理】

题意 : 就是在两个区间中选择一些数, 使得他们的乘积是2017的倍数. 问这样的点对一共有多少对.思路 :因为2017是质数,所以我们只需要考虑2017的倍数就好,只有存在2017的倍数才能组成2017的倍数,所以我们只需要简单的容斥一下,首先找到a,b这个区间里面有多少个2017的倍数 s1,再找到c,d这个区间有多少个2017的倍数s2,再减掉重复的就好. 即s1乘c,d区间长度,s2乘a,

2017-06-23 22:16:39 462

原创 2017年四川省赛 --- D 题 Dynamic Graph 【 维护路径 】

题目地址补题地址题意 : 给一个DAG(有向无环图) 有q次操作, 每次操作把一个点变成黑色或者变回来(这些点初始都是白色的), 问每次操作后这个图中起点到终点有路径且这条路径上面的点都是白色的.思路 : 维护F[u][v],表示u->v的路径条数, 然后对于每次操作更新 F[u][v] -+= F[u][x]*F[x][v], 然后判断F[u][v]是否>0即可, 这样做是对的,但是F[u

2017-06-23 16:16:55 442

原创 C语言链表最全操作

struct node { int num; struct node *next; }; /*1: 创建链表. */struct node *creat(){ struct node *p1,*p2,*head=NULL; while(1){ p1=(struct node *)malloc(sizeof(struct node));

2017-06-23 10:06:26 380

原创 C语言一些最基本的排序知识

1: 选择排序#include<stdio.h>#include<algorithm>using namespace std;int main(){ int a[10]; int i,j,minn; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<9;i++){ minn=i;

2017-06-23 10:06:14 347

原创 java中的一些函数和学习ACM (一)

一篇关于JAVA acm讲的很好的博客注意 : 用JAVA 交题时, 类名要用Main, 不要加包名, 要加引用的javaAPI. import那些.1 : 判断两个字符串是否相等在java中,用的是equals();例:A字符串和B字符串比较:if(A.equals(B)){}返回true 或false.String 的equals 方法用于比较两个字符串是否相等。由于字符串是对象类

2017-06-23 10:04:54 1557

原创 HDU --- 1878 【欧拉回路】以及基本欧拉回路的知识

题意:这道题讲的是判断所给图中是否存在一个欧拉回路。知识普及:欧拉通路: 通过图中每条边且只通过一次,并且经过每一顶点的通路。 欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路。 &nbsp;无向图是否具有欧拉通路或回路的判定:欧拉通路:图连通;图中只有0个或2个度为奇数的节点 欧拉回路:图连通;图中所有节点度均为偶数 &nbsp;有向...

2017-06-23 09:56:24 441

原创 HDU---6029 Graph Theory 【二分图匹配思想相关运用】

是一道水题,前提能读懂题!有许多点,操作从第二点开始,每个点都有以下两个操作 1: 把当前点与前面所有的点相连 2: 不对当前点做任何操作.问在最后的这些边的集合中,能否选择一些边,使得这些边没有公共的点,且所有的点都被这些边所覆盖. 题都读懂了,就好做了赛#include<cstdio>using namespace std;int main(){ int t; sca

2017-06-23 09:55:20 689

原创 2017年四川省赛 --- L 题 (Nice Trick) 【前缀加暴力枚举】或【推公式】

补题地址题目地址思路 : 有两个方法, 一个是题目中已经给出三项式的计算方法, 这样我们可以通过枚举第四位来求出答案. 注意的是前三项那个计算式必须只能计算一次就可以知道所有的答案, 否则复杂度太高(On^2). 所以就用前缀和来计算(On). 二是 去理解三部分的计算方法怎么给出来的, 然后去推四部分的公式, 也可以做! 相对来说第二种方法时间更长, 数学功底要求大, 所以建议用第一种方法.

2017-06-23 09:54:39 717 1

原创 简单莫对算法 --- 离线处理所有询问

思想: 先把所有的询问全部记下来. 然后通过一定的技巧使得暴力的复杂度不高, 从而达到目的, 一次性全部输出答案.以这两道模板题来说明一下它如何暴力的更漂亮. 复杂度为 O n ^ 3/2 ; (2e5是可以跑的) 小Z的袜子 AC Code#include <bits/stdc++.h>#define ll long longusing namespace std;const int

2017-06-23 09:47:41 492

原创 CodeForces - 681C 【优先队列】

传送门 优先队列在语法(推入,删除)上与普通队列一样,不同在于声明时要这样:priority_queue#include<cstdio>#include<queue>#include<cstring>using namespace std;const int maxn=1000005;struct node{ char ch; int x;}op[maxn];int

2017-06-23 09:42:24 465

原创 拓扑排序 (一种给定的特殊排序)

拓扑排序关键在于需要维护一个入度为0的顶点的集合.(只出不入)一种特殊的排序方法,什么时候用到拓扑排序了,就是当给定了一种特殊的先后顺序时,叫你以某种方式输出给顺序时就要想到用拓扑排序(比如).然后拓扑排序当然也可以用数组直接进行模拟,但是时间不是这么的快,所以用模拟邻接表的方式(这个是最快,最省空间的)来写,然后根据题目需要选取适当的优先队列来模拟,虽然过程比较复杂,但是时间会快很多.!注:当你用

2017-06-23 09:35:55 419

转载 优先队列用法介绍

因为最近比赛需要用到数据结构,所以加深学习了下,这是我看到的一篇比较好的讲优先队列的. 优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队~ 百度百科上这样描述的:   优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素

2017-06-23 09:31:53 368

原创 背包九讲的小理解

动态规划的入门算法, 简单形象又好理解 : 大牛的博客 只提醒一些比较重要的知识, 其他的都去看这个大牛的博客 1 : 01背包 问题描述: 有n中物品, 背包容量是tot, 每种物品都有一个体积和价值, 常规询问tot容量的背包最多能得到多少价值. 最优复杂度做法O(NV). 最基础的二维表示状态 dp[i][j] 代表前i件物品当前的j体积下的最优值. 转移方程为 : dp[i...

2017-06-22 18:29:44 413

原创 二分图算法模板以及相关知识(判定二分图)

说说二分图,其实图论的题难点不在用算法,难在如何建图,只有图建好了,剩下的就简单了,在这说说求二分图的算法,即匈牙利算法,其实一点都不难,也很好理解拿笔写写就行了.//板子, 直接套就行/** @Cain*/const int maxn=1e3+5;bool vis[maxn];int link[maxn]; //初始化为0. 如果有0这个点, 那么就初始化为-1.vecto

2017-06-22 18:26:59 764

原创 OpenJ_Bailian - 2787 算24 【思维 + dfs】

传送门思路 : 因为要问是否可以算出, 所以需要把所有可能性都列出来, 自然就要想到搜素赛.AC Code#include<cstdio>#include<algorithm>#include<cmath>#include<iostream>#include<cstring>#define db double#define CLR(x) memset(x,0,sizeof(x))usi

2017-06-22 17:44:26 776

原创 UVA - 11624 Fire! 【双BFS + 思维】

题意: 迷宫里有多处起火点, 里面有一个人, 人和火都不能传过墙, 问人能否在火烧到那个人之前逃出迷宫, 如果能输出最少步骤, 否则输出IMPOSSIBLE.思路 : 进行双BFS, 同时搜索人和火, 并单独判断条件就可以了. #include<cstdio>#include<cmath>#include<algorithm>#include<iostream>#include<cstri

2017-06-22 17:14:17 343

原创 POJ - 3414 Pots 【BFS + 保存(打印)路径 】

传送门 // 题意: 给定两个体积的杯子, 有如题的三种操作, 问能否倒出来给定的一个体积水. 输出最少的步骤和具体的操作步骤.// 思路: 这道题的难点在于操作路径, 不能用记录前驱的方法来解决, 因为同一个步骤可能会有多个相同的前驱, 也就是不好操作. 那么最好的方法就是把到这一步之前的步全部保存下来, 然后一一输出即可. 然后其他的步骤和非常可乐很像啦, 直接bfs搜搜即可….AC...

2017-06-22 17:06:20 386

原创 HDU -1495 非常可乐 【 BFS 】

传送门 // 题意: 有一个体积为s的瓶子, 有两个体积为n, m的杯子, 问是否有可能将s体积的水平分成在两个容器中各s/2. 有的话输出最少要倒的次数,思路 : 每一次倒水有六种方法,即(s-&gt;a ; s-&gt;b ; a-&gt;s ; a-&gt;b ; b-&gt;s ; b-&gt;a),我们要得到最少的倒的次数,当然就是用bfs咯. 每次将六中操作一一模拟入队即可…...

2017-06-22 17:05:59 363

原创 三种最常见最短路算法 及其 应用范围 // 兼板子

HDU – 2544 模板题 第一种: Dijkstra算法 //用于求单源最短路径void dij(int u) //从u点开始找出距离所有的点最短距离. n 是点数.{ Fill(vis,0); for(int i = 1 ; i &amp;amp;amp;amp;amp;amp;amp;lt;= n ; i ++) near[i] = g[u][i]; vis[u]=1; for(int i =...

2017-06-22 17:04:42 1634

原创 poj --- 1724 最短路变形 【Dij + 优先队列 】

传送门 //题意:要从1到N的最短路并且每一条路上有对应的花费要求,总花费不能大于给定的一个值K,输出最短路径的长度. //方法: 不仅要最短,还有花费限制,所以就想到用优先队列,来维护一个优先级关系,使得答案最优. AC代码:const int maxn = 1e4+5;int cas=1;int n,m,tt;int cnt, head[maxn/100];struct node

2017-06-22 17:03:10 521

原创 博弈论学习之巴什博弈,尼姆博弈, sg博弈

博弈论真是一个神奇的东西,感觉和博弈论厉害的人玩游戏绝对会输. 这个博客讲的很好很全面此类问题一般有如下特点:1、博弈模型为两人轮流决策的非合作博弈。即两人轮流进行决策,并且两人都使用最优策略来获取胜利。2、博弈是有限的。即无论两人怎样决策,都会在有限步后决出胜负。3、公平博弈。即两人进行决策所遵循的规则相同。(一般看到这类题就可以想到用博弈论了)巴什博弈 : 分开讲的...

2017-06-22 17:01:38 692

原创 字典树的小理解兼模板

好的博客讲解 首先字典树是干嘛的…. 比如: 1、给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单词表中出现过。答:简单!map,短小精悍。好。下一个2、给出n个单词和m个询问,每次询问一个前缀,回答询问是多少个单词的前缀。答:map,把每个单词拆开。judge:n&lt;=200000,TLE!这就需要一种高级数据结构——Trie树(字典树)复杂度为...

2017-06-22 16:58:13 297

原创 pat -- 二叉树的遍历 (浙大的PAT)

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数 N(N≤30)是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:7 2 3 1 5 7 6 4 1 2 3 4 5 6 7输

2017-06-22 16:55:31 1023

原创 二叉树的一些基本知识总结

学了学二叉树,这里说说怎样遍历二叉树. 四种方式:前序遍历,中序遍历,后序遍历,层次遍历.主要说说递归的遍历方法 前序: 先根节点,后左子树,再右子树. 中序: 先左子树,后根节点,再右子树. 后序: 先左子树,后右子树,再根节点. 层序遍历:按照层的关系,从上到下,从左到右,一个一个遍历(用队列实现) 这是图片形式:这是先序遍历的非递归方法 中序: 后序:层序: 然后有一类题,

2017-06-22 16:53:36 536

原创 埃式筛法(素数筛) + 区间素数筛 + 应用

埃拉托斯特尼筛法,简称埃氏筛或爱氏筛埃式筛法:给定一个正整数n(n&lt;=10^6),问n以内有多少个素数?做法:做法其实很简单,首先将2到n范围内的整数写下来,其中2是最小的素数。将表中所有的2的倍数划去,表中剩下的最小的数字就是3,他不能被更小的数整除,所以3是素数。再将表中所有的3的倍数划去……以此类推,如果表中剩余的最小的数是m,那么m就是素数。然后将表中所有m的倍数划去,像这样...

2017-06-22 16:48:01 793

原创 HDU --- 4305 Lighting 【生成树计数 + 向量 】

传送门题意: 有一道闪电, 如果两个点之间的距离小于R , 并且他们直接没有点, 则这两个点之间就有一条边, 最后问这个图中生成树有几颗.思路 : 矩阵树 + 判断向量是否共线既可以解决!!! 注意 : 判断完了共线后, 还要判断那个点是不是在他们中间, 因为有可能三个点共线, 但是与之共线的那个点不一定在判断的那两个点之间. 这道题难在判断两个点之间是否还有其他点.调BUG调到吐血AC 代码

2017-06-22 16:38:25 452

原创 大数运算之加法和乘法算法C++模板

大数加法:void caladd(char *a,char *b,char *res){ int lena=strlen(a); int lenb=strlen(b); int i=lena-1,j=lenb-1,k=0; while( (i+1) || (j+1) ) { if(i!=-1) res[k] += (a[i--]-'0');

2017-06-22 15:08:14 986

原创 poj 1060---青蛙的约会 【扩展GCD】

传送门题意: 问最少要跳跃几次两只青蛙才能见面. 思路: 根据题意,两个青蛙跳到同一个点上才算是遇到了,所以有 (x+m*t) - (y+n*t) = p * k; (t是跳的次数,k是a青蛙跳的圈数跟b青蛙的圈数之差。整个就是路程差等于纬度线周长的整数倍), 转化一下: (n-m) * t + k * p = x – y; 令 a = n-m, b = k, c =

2017-06-22 14:44:01 389

原创 HDU --- 4549 M斐波那契数列 【费马小定理+矩阵快速幂】

传送门 思路: 通过把前面几项手推出来可以发现, 其次方项符合斐波那契数列, 又因为数据非常大, 所以就可以想到用矩阵快速幂去求得次方项, 需要注意的就是我们求的是次方, 而答案是取的某个数的该次方, 而a^(p-1) % p != a^((p-1)%p, 所以就需要加费马小定理去 %AC Code#include<bits/stdc++.h>#define CLR(x) memset(x,0

2017-06-22 14:34:28 559

原创 HDU --- 5015 233 Matrix 【思维 + 矩阵快速幂】

传送门思路 : 第一列元素为: 0 a1 a2 a3 a4转化为: 23 a1 a2 a3 a4 3 则第二列为: 23*10+3 23*10+3+a1 23*10+3+a1+a2 23*10+3+a1+a2+a3 2*10+3+a1+a2+a3+a4 3 所以就可以建立矩阵, 然后求相应的列数就可以啦!AC Code#include<bits/stdc++.

2017-06-22 14:27:33 388

原创 ZOJ --- 2974 倒水 【思维 + 矩阵快速幂】

传送门题意 : 就是给你N个瓶子, 每一分钟依次对每一个瓶子进行操作, 分别是将该个瓶子里的水, 倒入所给的瓶子里去, 一共持续m分钟, 最后输出每一个瓶子里的水. 思路 : 不好一眼看出来是矩阵的思想, 这是就需要把样例进行推导, 的然后就可以写出来两个矩阵相乘, 最后得到的就是一个其他矩阵, 所以这道题就是矩阵快速幂. 特别注意下当k等于0时对瓶子的操作. AC 代码:#include<b

2017-06-22 14:13:31 527

原创 HDU --- 4686 【矩阵快速幂+求和】

传送门思路: 这道题也是给了公式, 然后跟着公式推导, 也很容易的知道矩阵的构造, 注意的是在矩阵中把Sn加上, 这样就可以直接算出答案了.AC Code#include<cstdio>#include<cmath>#include<algorithm>#include<iostream>#include<cstring>#include<set>#include<queue>#inc

2017-06-21 13:59:44 499

原创 Recursive sequence HDU --- 5950 【公式矩阵快速幂】

传送门思路:因为直接给了公式, 所以可以直接推的我们所需要的目标矩阵, 如果没有什么思路的话看看另外一篇原理介绍, 里面有一遍博客讲的炒鸡好!(怎么推要求那个矩阵的几次方,就是用等比数列,an = a(n-1) * q ,然后看题目给的那一项从而推出是q的几次方.)AC代码:#include<cstdio>#include<cmath>#include<cstring>#include<alg

2017-06-21 13:53:37 390

原创 快速幂,矩阵快速幂原理介绍

快速幂:复杂度为logn,比普通的n快了很多了.原理 :以求a的b次方来介绍:首先把b转换成二进制数该二进制数第i位的权为 2^i - 1 .比如 : 11的二进制是101111 = 2³×1 + 2²×0 + 2¹×1 + 2º×1所以假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11时           a...

2017-06-21 13:49:16 2399

原创 树状数组求逆序对/ 兼板子 (有无重复数字都可)

归并排序和树状数组都可以用nlogn的算法做到求出逆序对.但这里着重讲树状数组的原理与求法. 树状数组最常用的方面就是用来求逆序对, 普通方法需要n^2的复杂度, 而树状数组只需要用nlogn的复杂度, 所以是很好的优化, 关键在于内部函数lowbit的应用. 这是树状数组的结构图 : lowbit函数就是进行哪些实现之间的转化的, 因为这些数之间在二进制中存在着某种联系, 而lowbit函数...

2017-06-21 13:41:48 1231

原创 一些常见的子列问题【思维】

问题模型: 给定一连串的数(或子串),问一些关于子列(和,差,公共子串,公共子序列等)的一些问题. (数字的个数在1e5之内,每个数的范围-1000~1000)和一些常见的思想与处理.1 : 给定一串数字,求最大连续子序和. (很明显的区间和就用前缀呀, 维护一个最小前缀和即可) 这里给出的是贪心的做法。const int inf=1e9;int main() { ...

2017-06-21 13:41:14 749

原创 一些用前缀思想解决的题(持续完善)

有前缀和, 前缀GCD, 前缀奇数个数, 前缀偶数个数, 前缀差, 还有就是相对位置很重要的, 还有就是区间和的.等等(特别是区间和的, 一定可以用前缀和的思想来做!!!), 都要根据自己的思想来去解决!!!,前缀思想真的还是挺考人的, 如果想不到的话…..记住 : 一般涉及到区间的什么值时, 就要用前缀思想.HDU — 4223 思路 : 目的是找一个子串, 其和的绝对值最小. 其实不用

2017-06-21 13:38:54 790

原创 POJ ---- 1222 和 POJ --- 3279 【二进制思维+状态压缩】

POJ1222 题意: 1代表打开, 0关闭, 输出一种方式可以将整个矩阵都关闭. 思路: 我们首先要明白一个事实, 那就是如果第一行的操作确定了, 那么所有的操作就确定下来了, 只要他是可行的. 所以我们直接枚举所有可能, 然后模拟做 , 然后下一行的操作方式就是上一行的状态, 因为亮的必须关闭, 最后判断一下最后一行是不是全关上了就行啦, 注意一些小细节.然后这个一个字节就行啦, 所...

2017-06-21 13:37:57 566

原创 2017 年广工大的程序设计决赛H题 --- tmk买礼物

题目在此其实下来问了大佬,说是维护一个前缀和就可以了,当时不是太懂,后来仔细想想,就想通了,关键是当时比赛时我还想到了这一特点,就是没有的深入想下去,好气啊!!!思路 : 就是就是维护一个前缀和,因为有一个特点,就是从1连着的数字刚好可以构成从1到这些数字相加这么多数字,所以只要维护前缀和保持规律了就可以了,否则就直接跳出来就行了!!!//就是前缀和,后面的数字如果大于前缀和+1 说明他和区间没有交

2017-06-21 13:36:49 364

空空如也

空空如也

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

TA关注的人

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