数据结构与STL
文章平均质量分 70
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
UVA10954 Add All (优先队列)
题解:有n(n<=5000)个数的集合S,每次可以从S中删除两个数,然后把它们的和放回集合里面,直至剩下最后一个数,每次操作的开销等于删除两个数之和,求最小总开销优先队列代码#include <cstdio>#include <queue>#include <cstring>#include <iostream>#include <cstdlib>#include <algorithm>原创 2016-01-17 17:06:09 · 666 阅读 · 0 评论 -
团体程序设计天梯赛L2-004 这是二叉搜索树吗?(数据结构)
思路:对于一颗合法的二叉搜索树,那么即满足对于区间[l,r],存在一个点i,a[l]#include#include#includeusing namespace std;const int maxn = 1005;int a[maxn];int check1(int l,int r){ if(l>=r) return 1; int key = r; for(原创 2016-06-28 21:37:56 · 2805 阅读 · 0 评论 -
团体程序设计天梯赛L2-005 集合相似度(STL)
思路:开个set随便搞搞就好了#include#include#includeusing namespace std;sets[51];int main(){ int n; scanf("%d",&n); for(int i = 0;i<n;i++) { int num; scanf("%d",&num); while(num--) {原创 2016-06-28 21:39:20 · 376 阅读 · 0 评论 -
团体程序设计天梯赛L2-006 树的遍历(数据结构)
思路:根据后序和中序建树,然后BFS输出就好了#include#include#includeusing namespace std;struct Node{ int val; Node*lchild; Node*rchild;};Node *build(int *mid,int *post,int len){ if(len==0) return NULL;原创 2016-06-28 21:40:35 · 606 阅读 · 0 评论 -
天梯赛 L2-011. 玩转二叉树(数据结构)
思路:先序中序建树#includeusing namespace std;const int maxn = 100;int in[maxn],pre[maxn];struct Node{ int val; Node *lchild; Node *rchild;};void build(Node *&root,int l,int r,int t){ int pos原创 2016-07-15 20:22:03 · 522 阅读 · 0 评论 -
hdu5818 Joint Stacks(优先队列)
思路:直接用两个优先队列模拟操作,然后一点优化就是每次merge都是把小的往大的插,这样复杂度的期望应该是nlogn的#include using namespace std;typedef long long LL;const int N=1e5+10;const int INF=0x3f3f3f3f;int cas=1,T;struct node{ int t原创 2016-08-10 00:19:40 · 290 阅读 · 0 评论 -
HDU 4268 Alice and Bob(贪心+STL)
思路:分析:对Alice 和Bob的牌都按 h 排序,然后对Alice的每张牌,在Bob的牌中找一个最大能覆盖的 。也就是说首先满足Alice的牌 h >= Bob的牌 h,然后找最大 w。在查找最大的w时,可以使用multiset中的lower_bound。multiset动态插入每次只插入满足Alice的牌 h >= Bob的牌 h 的牌。#include#inc原创 2016-08-10 16:50:52 · 896 阅读 · 0 评论 -
HDU 4006 The kth great number(STL)
思路:求第k大的数,k是确定的,那么直接用一个优先队列保留前K个元素就好了#includeusing namespace std;int main(){ int n,k; while(scanf("%d%d",&n,&k)!=EOF) { priority_queue,greater >q; for (int i = 1;i<=n;i++) { char原创 2016-08-10 16:52:20 · 327 阅读 · 0 评论 -
POJ 3481 Double Queue(STL)
思路:虽然是个SBT的裸题,不过用set也是可以水过的#include#include#include#include#includeusing namespace std;int main(){ set >s; set >::iterator it; int p,k,n; while(scanf("%d",&n)!=EOF && n) { if(n原创 2016-08-10 16:53:29 · 300 阅读 · 0 评论 -
HDU 1412 {A} + {B}(STL)
思路:求集合的并集而不是加法,用一个set随便搞搞就好了#includeusing namespace std;int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { sets; int x; for(int i = 1;i<=n;i++) { scanf("%d",&x); s.inser原创 2016-08-10 16:54:36 · 334 阅读 · 0 评论 -
2016北京网络赛C hihocode1385 A Simple Job(map)
思路:考虑数据范围挺小的,直接用string+map就可以了#include #include#include#include#includeusing namespace std;string s;map vis;int main(){ while(getline(cin,s)) { if(s!="####") { int len = s.size原创 2016-09-25 14:43:13 · 622 阅读 · 0 评论 -
uva11020 Efficient Solutions
思路:大白上的题...平衡树的应用#include#include#include#includeusing namespace std;struct Point{ int x,y; Point(int xx,int yy):x(xx),y(yy){} bool operator < (const Point&rhs)const { return x < rhs原创 2016-06-05 21:12:57 · 478 阅读 · 0 评论 -
uva11991 Easy Problem from Rujia Liu?(STL)
思路:给你一串数字,每次询问k,v,输出代表第K个V的下标,直接用STL搞搞#include#include#include#includeusing namespace std;int main(){ int n,q; while(scanf("%d%d",&n,&q)!=EOF) { map >mp; for(int i = 1;i<=n原创 2016-06-05 16:31:10 · 409 阅读 · 0 评论 -
uva11995 I Can Guess the Data Structure!(基本数据结构)
题意:给定一系列操作,让你判断是否是栈,队列,优先队列思路:直接用STL的模拟一波就好了#include#include#include#include#includeusing namespace std;int main(){ int n; while(scanf("%d",&n)!=EOF) { queueq; stacks;原创 2016-06-05 16:07:41 · 630 阅读 · 0 评论 -
2015‘12杭电校赛1008 Study Words(map,vector瞎搞)
题解:有中文输入吓了一跳,不过强行各种STL开搞!代码#include <bits/stdc++.h>#include <cstdio>#include <queue>#include <cstring>#include <iostream>#include <cstdlib>#include <algorithm>#include <vector>#include <map>#i原创 2016-01-06 22:06:27 · 349 阅读 · 0 评论 -
CodeForces 4C Registration systems
题意:输入一系列字符串,如果之前没出现过则输出OK,如果之前输出过,则输出这个字符串+出现的次数在后面思路:用map随便搞搞#include #include #include #include #include #include #include #include #include #include #include #include #include原创 2016-03-22 00:23:23 · 297 阅读 · 0 评论 -
CodeForces 3D Least Cost Bracket Sequence
题意:给你一串序列,有左括号右括号和问号,现在需要你把问号变成括号,求最小代价把这个序列变成合法的,如果没有则输出-1思路:直接暴力扫一遍,先将问号的都变成右括号,如果当前这个括号的位置#includeusing namespace std;priority_queue >Q;string s;int main(){ cin>>s; if(s.size(原创 2016-03-28 22:20:57 · 450 阅读 · 0 评论 -
UVALive 3135 Argus(优先队列)
思路:优先队列#includeusing namespace std;struct Item{ int QNum,Period,Time; bool operator <(const Item&a)const { return Time > a.Time || (Time == a.Time && QNum > a.QNum); }};int main(){原创 2016-04-26 22:44:21 · 438 阅读 · 0 评论 -
CodeForces 567D One-Dimensional Battle Ships
题意:有一个一维线段,上面摆了k个船,每个船的长度都为a,然后有一个人来打,问你第几次攻击 就可以使得这个船无论怎么摆都不合法了思路:一个区间合并的题,对于每一次的攻击,都只会影响到这个点所在区间,然后我们更新一下新出现的两个区间里面能摆多少个船就好了#includeusing namespace std;sets;mapvis;int main(){ int n原创 2016-04-30 00:10:46 · 327 阅读 · 0 评论 -
HDU 5127 Dogs' Candies
思路:直接暴力怒艹...别多想#includeusing namespace std;#define LL long long//list >li;int main(){ int n; while (scanf("%d",&n)!=EOF&&n) { list >li; LL op,a,b; for (int i = 0;i<n;i原创 2016-05-02 21:17:17 · 1359 阅读 · 0 评论 -
codeforces 675D Tree Construction(set)
题意:输出2到n在一颗不平衡二叉排序树里面的父节点的编号思路:显然边建树边输出是会TLE的,那么开个set乱搞一下就可以了#include#include#include#includeusing namespace std;const int maxn = 1e5+6;mappos;set s;int main(){ int n; scanf("%d原创 2016-05-17 21:04:32 · 1169 阅读 · 2 评论 -
CodeForces 612C Replace To Make Regular Bracket Sequence
题意:给你一个只含有括号的字符串,你可以将一种类型的左括号改成另外一种类型,右括号改成另外一种右括号问你最少修改多少次,才能使得这个字符串匹配,输出次数思路:用stack,每次将左括号压进stack里面,遇到右括号就判断一下就好了非法就很简单,看看栈最后是否还有,看看右括号的时候,左括号的栈是否为空#includeusing namespace std;str原创 2016-04-22 23:49:12 · 579 阅读 · 0 评论 -
HDU 4544 湫湫系列故事——消灭兔子
思路:STL优先队列基本运用#includeusing namespace std;#define LL long longconst int maxn = 100000+100;struct Node{ int d; int p; friend bool operator < (Node a,Node b) { return a.p>b.p; }}nodes原创 2016-05-19 23:01:29 · 353 阅读 · 0 评论 -
HDU 1075 What Are You Talking About
思路:用的map水过去了。。。其实应该是字典树裸题#includeusing namespace std;mapmp;char str[3000];int main(){ string a,b; cin >> a; while(cin >> a) { if(a=="END") break; cin >> b; mp[b]=a;原创 2016-05-20 19:24:22 · 269 阅读 · 0 评论 -
51nod 1163 最高的奖励(优先队列)
思路:直接开个优先队列搞搞,如果前面的行程已经安排满了,那么就替换最小值#includeusing namespace std;#define LL long longconst int maxn = 50000+7;int n;struct Node{ int w; int t;}a[maxn];bool cmp(Node a,Node b){ return原创 2016-10-05 17:44:49 · 372 阅读 · 0 评论