ACM-数据结构
文章平均质量分 55
但求-_-心安
充满鲜花的世界到底在那里,如果他真的存在那么我一定会去。
展开
-
并查集模板
int par[MAX_N],rank[MAX_N];//父亲,树的高度//初始化n个数void init(int n){ for(int i=0;i { par[i]=i; rank[i]=0; }}//查询书的根int find(int x){ if(par[x]==x)return原创 2016-08-16 09:59:28 · 317 阅读 · 0 评论 -
bitset用法小结
b.any()b中是否存在置为1的二进制位?b.none()b中不存在置为1的二进制位吗?b.count()b中置为1的二进制位的个数b.size()b中二进制位的个数b[pos]访问b中在pos处的二进制位b.test(pos)原创 2017-10-06 11:29:18 · 549 阅读 · 0 评论 -
51nod 1573 美丽的集合(bitset)
正如题解所说,这个可以暴力,但是必须用bitset,因为这个是lg(n)的算法。所以我直接暴力错了几组测试数据拿了5分。。。心痛,只用过一次bitset,然而当时想到了这个,并不熟练也不知道他的复杂度怎么来的。#include#include#include using namespace std;const int N=1005;bitset a[N],b;int n,i,f[N原创 2017-10-06 11:22:02 · 392 阅读 · 0 评论 -
51nod 1019 逆序数 (归并排序)
归并排序的复杂度是n*log(n)和快排的差不多。每次要去排序的是前半部分和后半部分,前半部分是排好序的,后半部分也是排好序的。当左边的子序列出现一个数大于右边的子序列的时候,左边子序列末尾数的位置减去当前左边这个数的位置加1就得到了有多少逆序对了#include using namespace std;const int maxn=5e4+7;int ans=0;void merge原创 2017-10-08 19:13:44 · 281 阅读 · 0 评论 -
hdu 6168 Numbers
将b数组排序,取出最小的两项作为a_1,a_2a1,a2,删除a_1,a_2,a_1+a_2a1,a2,a1+a2,再取出最小项作为a_3a3,再删除a_3,a_1+a_3,a_2+a_3a3,a1+a3,a2+a3,再取出最小项作为a_4a4,依次列推。原创 2017-08-23 09:10:20 · 243 阅读 · 0 评论 -
hdu 6180 Schedule
贪心,条件有两个,机器用的最少,总时间最短,开始把总时间最短这个条件自动忽略了,怎么总时间最短,比如 4 1 3 1 6 7 8 9 101,3 和1 6占用两个机器,7 8和9 10放在1 6后面用时最短。1 3直接就这样结束学习一波multiset吧,开始用priority_queue 没想到总时间最短GG代码来自原创 2017-08-25 17:51:39 · 311 阅读 · 0 评论 -
hdu 6181 Two Paths (次短路)
当时再搬宿舍,2点多看了下,特困,看了别人说次短路,我只做过次小生成树,没做过这个,提交了个模板就睡觉了。下午去海里游泳,贼刺激,说实话海水不好喝,闭气躺在海上是真的爽,以前总是用泳圈在玩,现在感觉游泳圈不好玩了。次短路,数据结构以前可能做过,总有点印象,总感觉自己敲过不止一遍这个。如果当前路径比最短路短,就把最短路的值给次短路,最短路要当前值。如果当前值比最短路长,比次短路短原创 2017-08-25 10:36:14 · 275 阅读 · 0 评论 -
poj 2406 Power Strings(kmp)
注意判断剩下的一节是否能够被n整除#include #include #include #include using namespace std;const int maxn=1000010;int next[maxn],n;char s[maxn];void get_next(){ int j=0,k=-1; next[0]=-1; while(j<=n原创 2017-08-07 10:06:26 · 185 阅读 · 0 评论 -
浅谈kmp算法
kmp算法我刚开始学习的时候,是为了查找字符串的时候节省时间。在一个很长的字符串中,查找一个很长的字符串kmp算法可以节省大量的时间。 如果使用暴力的话第一次查找到s【4】下次还要从s【1】开始查找,kmp算法是从s【4】继续往下查找 kmp算法的核心是求解next【】的值。next【】就是直接从s【5】往下查找的核心。 T字符原创 2016-08-28 17:02:44 · 1795 阅读 · 0 评论 -
2017 Multi-University Training Contest - Team 2 1003 Maximum Sequence
这是一道优先队列题,#include "stdio.h"#include "string.h"#include #include #include using namespace std;const int MAX=250000+20;const int mod=1000000000+7;struct node{ int v; int i; frie原创 2017-07-27 16:37:55 · 200 阅读 · 0 评论 -
hdu 6085 Rikka with Candies
bitset怎么鬼?,还有这种操作?百度一波bitset,这种操作令人窒息。首先思路:如果a%b==k b肯定大于k,不用想的事情,所以从最大的b开始枚举。a%b=k 就是a-b*j=k,就是a-k=b*j所以:#include using namespace std;const int N =50000+5;bitseta,b,ans,bx;void solve(in原创 2017-08-17 11:02:17 · 360 阅读 · 0 评论 -
优先队列priority_queue 用法详解 +poj 2442 Sequence
优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。用法:示例:将元素5,3,2,4,6依次p原创 2017-01-21 22:24:53 · 342 阅读 · 0 评论 -
poj 1936 All in All
#include #include #include #define MAXN 60 /* s1在s2中就行 */using namespace std; int main() { int i,j; char s1[100000],s2[100000]; while(cin>>s1>>s2) { int len1原创 2017-01-20 20:41:28 · 225 阅读 · 0 评论 -
poj 3080 Blue Jeans (串)
#include #include #define MAXN 60 /* 暑假看的,没做记录,当时用的kmp,现在复习下stl 当时做的不是这个(stl没过)现在差点忘了,复习下正好 顺便提下,npos比跟.size()比好得多,不必考虑边界问题 可以用于find,发到博客用于备忘 */using namespace std; int main() {原创 2017-01-20 19:35:47 · 286 阅读 · 0 评论 -
POJ 3461 kmp
一道基础的kmp 过了一个暑假仍是宝刀不老,直接写出next的算法#include#include#include#includeusing namespace std; int next1[10009]; char s[10009],s1[1000009]; void get_next1(int n) { int i,j,k;原创 2016-10-12 17:47:10 · 258 阅读 · 0 评论 -
Longest Paths uva
Longest PathsTime Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %lluSubmit Status Practice UVA10000Description Longest Paths原创 2016-09-05 18:06:22 · 396 阅读 · 0 评论 -
Floyd算法模板
void Floyd(){ int A[MAXV][MAXV],path[MAXV][MAXV]; int i,j,k,n; scanf("%d",&n); for(i=0;i for(j=0;j scanf("%d",&A[i][j]); for(i=0;i { for(原创 2016-09-04 12:33:37 · 405 阅读 · 0 评论 -
c++ list, vector, map, set 区别与用法比较
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要转载 2016-08-29 17:45:15 · 743 阅读 · 0 评论 -
51nod 1791 合法括号子段 (队列)
每次匹配上一个,当前位置能匹配的括号数应该是左括号减一位置的括号数+1;代码一看就懂,还自带stack函数,省的数组模拟了。#include using namespace std;char s[1100009];long long num[1100009];stackq;int main(){ int t; scanf("%d",&t); while(原创 2017-11-02 21:56:42 · 355 阅读 · 0 评论