X-man

导航

2013年4月7日 #

STL系列之一 deque双向队列

摘要: STL系列之一 deque双向队列分类:STL 他山之石2011-11-08 09:5214855人阅读评论(12)收藏举报vectoriteratordeque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数:deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数据会比vector慢。具体的deque实现可以参考 阅读全文

posted @ 2013-04-07 19:34 雨钝风轻 阅读(190) 评论(0) 推荐(0) 编辑

hdu 3951 Coin Game (博弈)

摘要: 题意:给你n个硬币排成一圈,编号1-n,只能翻转连续的1~k个的硬币。翻最后一枚硬币者赢。思路:博弈 1) 若k=1,则一次只能去翻一枚,奇数先手赢,偶数后手赢。 2)若k>1: a: 先手一次翻完,先手赢; b: 先手不能翻完,第一次必定断环。只要后手一次翻完,或将其分为相等数量的两段, 之后先手怎么操作后手就怎么操作,后手必赢。#include<stdio.h>int main(){ int T; int t=0; int n,k; scanf("%d",&T); while(T--) { t++; ... 阅读全文

posted @ 2013-04-07 19:23 雨钝风轻 阅读(163) 评论(0) 推荐(0) 编辑

hdu 1022 Train Problem I (栈的操作,还水了半天)

摘要: 题意: 输入的两列字符串,第一列表示进入的顺序,第二列表示出去的顺序,问是否符合后进先出。#include<stdio.h>#include<iostream>#include<string.h>#include<stack>using namespace std;int main(){ int n,i,j,k; char a[5000],b[5000]; while(scanf("%d",&n)!=EOF) { stack<char>s; scanf("%s",a); scanf(&q 阅读全文

posted @ 2013-04-07 18:45 雨钝风轻 阅读(188) 评论(0) 推荐(0) 编辑

POJ 1702 Eva's Balance (数论,平衡三进制)

摘要: 题意: 给你一个天平,和一些砝码,只是这些砝码有点特殊,它的重量是1,3,9,27,……3^n。让你把一些砝码和一个给定的重量的物体放在左边,另一些砝码放在右边,使天平平衡(每个砝码最多用一个),你会怎么做呢?这是一个很有趣的事,不是吗?这就是用平衡三进制解决最好的一个例子: 比如我们假设这个物体的重量是20,那么我们可以这样做。首先我们把20(十进制)转化为三进制(202)(其实是砝码的三种状态,放左边,放右边,不放),然后我们按照一定的规则,把这些数转化成0,1,-1表示。规则就是: 数的每一位只有三种状态,且,变换后是原来的值,只是三进制的表示方式改变了 傻瓜式理解就是在... 阅读全文

posted @ 2013-04-07 11:05 雨钝风轻 阅读(770) 评论(0) 推荐(0) 编辑

2013年4月6日 #

hdu 1046 Gridland (找规律题)

摘要: 题意: 将一个矩形划分成单位矩形。问从一个点出发,经过所有单位矩形的顶点1次后,回到起点的最短路径的长度是多少。思路: 用个专业点的说法,题目求的是哈密顿回路的最短长度。其实是数学推断题。首先可以得出的是,矩形的长宽是可以调转的,这并不影响最后结果。考虑一条S型的路线,从左上角的顶点出发,走一条S型的路线以最短距离走完最多的顶点,然后最后再尽量取最短路走完剩下的点。长为奇数与偶数时,最短路径的走法如图所示。 由此推断,两种走法都是与宽的奇偶性无关的。第一种情况,路径长度就是长宽之积;第二种情况,走到最后一个格的长度是长宽之积-1,再加上最后一个格到终点的距离,sqrt(2)。... 阅读全文

posted @ 2013-04-06 21:17 雨钝风轻 阅读(234) 评论(0) 推荐(0) 编辑

hdu 2084 数塔 (DP初步)

摘要: #include<stdio.h>int main(){ int n,m; int a[150][150]; scanf("%d",&n); while(n--) { scanf("%d",&m); for(int i=1;i<=m;i++) for(int j=0;j<i;j++) scanf("%d",&a[i-1][j]); for(int i=m;i>1;i--) for(int j=0;j<i-1;j++) { ... 阅读全文

posted @ 2013-04-06 19:32 雨钝风轻 阅读(272) 评论(0) 推荐(0) 编辑

hdu 1058 Humble Numbers (DP初步)

摘要: 题意: 一组质因子只含有2,3,5,7的数据从小到大排列,求出第n个数解题思路: 1.此题为动态规划,难点在于如何将数据从小到大放在数组中 2.各个因子逐渐增加相乘,再比较大小得出数组 3.注意输出格式, 末尾位数为1,且不为11为st 末尾位数为2,且不为12为nd 末尾位数为3,且不为13为rd#include<stdio.h>int main(){ int n; int num[5843]; int p2=0,p3=0,p5=0,p7=0; int t,t1,t2; num[0] = 1; fo... 阅读全文

posted @ 2013-04-06 19:03 雨钝风轻 阅读(182) 评论(0) 推荐(0) 编辑

hdu 1056 HangOver (打表水题)

摘要: 按题意写公式就行 #include<stdio.h>int main(){ int i; double n,a[350]; a[0] = 0.0; for(i=1;i<350;i++) a[i] = a[i-1]+1.0/(i+1); while(scanf("%lf",&n)!=EOF&&n!=0.00) { i=1; while(n>a[i])i++; printf("%d card(s)\n",i); } return 0;} 阅读全文

posted @ 2013-04-06 17:01 雨钝风轻 阅读(202) 评论(0) 推荐(0) 编辑

2013年4月5日 #

hdu 1702 :ACboy needs your help again!(练习使用双端队列)

摘要: 题目就是双端队列的基本操作#include<iostream>#include<stdio.h>#include<deque>//双端队列头文件#include<string.h>using namespace std;int main(){ int n,m,x; char s[5],s1[4],s2[4]; while(scanf("%d",&n)!=EOF) { while(n--) { deque<int>q;//双端队列的定义(并清空) scanf("%d %s",&m, 阅读全文

posted @ 2013-04-05 21:31 雨钝风轻 阅读(219) 评论(0) 推荐(0) 编辑

hdu 4022 Bombing (强大的map一对多的映射)

摘要: 题意不多解释,以我这种英语菜鸟都读得懂好吧!我承认参考了大牛的代码!!!!!!STL真心强大,最近刷的水题基本都是用STL!!选用map的理由: 1.map自定义了一个一对多 2.两个这样的map容器装下 x为键,y为值,和y为键,x为值的两个容器。 然后当C==0就输出当键位d的容器大小,并且去掉另一个容器中出现的点。#include<iostream>#include<stdio.h>#include<map>#include<set>using namespace std;//建立一个map,从int到一个multiset容器的映... 阅读全文

posted @ 2013-04-05 20:40 雨钝风轻 阅读(231) 评论(0) 推荐(0) 编辑