自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

purevegetable

戒骄戒躁,迈向明天。

  • 博客(63)
  • 资源 (3)
  • 收藏
  • 关注

原创 2013 ACM/ICPC Asia Regional Changchun Online Stone

题意:给你n个石头, Tang 和 Jiang依次轮流来拾取, 每次拿的数量为[  1~k ], 最后谁拿完的谁输掉比赛。  首先考虑种特殊情况, 当n%(k+1) == 1时, 不管每次Tang拿多少(数量为x),Jiang拿(m+1-x), 最后轮到Tang的时候就只剩下一个,  所以必定是Jiang赢。  其余的情况时(n%(k+1) != 1), Tang先从 n中拿出部分, 使得

2013-09-28 16:51:51 808

原创 poj 3368 Frequent values

脑子实在太死板了, 竟然就想着用纯的线段树来解决, 一直对那种不完全的区间不能分开, 看了下别人的解法, 都是离散了然后把2边可能不完全的区间去掉再进行的线段树的操作的。#include#include#include#include#define L(u) (u<<1)#define R(u) (u<<1|1)using namespace std;const i

2013-09-27 21:49:29 694

原创 poj 2777 Count Color

时隔2天才搞定, 哎, 最近各种忙啊, 忙得晕头转向。明显的线段树, 对于搞过状态压缩的, 一看到颜色为1~30, 于是马上想起了位运算, 这题需要成段更新, 不然绝对的超时, 其余的按照模板来就行了。#include#include#include#define L(u) (u<<1)#define R(u) (u<<1|1)using namespace std;con

2013-09-27 20:20:19 666

原创 poj 1861 Network

靠, 没仔细看题, 第二个竟然是最小生成树的边数, 白白wa了2次, kruskal的模板题, 测试样例错的, 大家别理会。#include#include#include#includeusing namespace std;const int Maxm = 15010;const int Maxn = 1010;const int inf = 0x3f3f3f;typ

2013-09-25 20:46:12 545

原创 poj 1502 MPI Maelstrom

还是简单的dij, 题太长了, 但是正经的话语却没几句, 给你一个邻接矩阵的一部分(对角线下面的), x表示这2点没有连着, 然后要你求所有点到点1距离的最短距离中最长的那个距离。没有思路, 完全就是赤裸裸的。#include#include#includeusing namespace std;const int N = 110;const int inf = 100000

2013-09-24 11:35:39 689

原创 poj 2263 Heavy Cargo

很简单的一题最短路, 稍微有点特殊的便是, 进行松弛时, 是按照min(dis[k],map[i][k])的大小来进行的, 并且得判断i k 是否连通, 然后就是赤裸裸的迪杰斯特拉了。#include#include#include#includeusing namespace std;const int Maxn = 210;const int inf = 0x3f3f3f3

2013-09-24 11:13:17 904

原创 poj 2182 Lost Cows

题意: 有n头牛, 标号为1~n, 它们不听话, 喝多了酒, 吃晚饭的时候没有按照序号排队, 告诉你此时队列里第2头牛到第n头牛它们前面序号比他们序号小的牛的数目, 让你求出这时排队的序列。 思路:咋看上去确实有点不像线段树, 但是倒着考虑下给你的那个数组, arr[i]表示的就是前i头牛, arr[i]的序号排第arr[i]+1名, 要逆着来, 每次都将找出来的牛拿出去就行。

2013-09-23 21:13:36 790

原创 2013 ACM/ICPC Asia Regional Changsha Online J Candies

感想:比赛一开始,队友就看出E是大水题, 我让他们敲, 我去看看G题, 顿时E题就出现过的了, 果然是大水题, 我继续我的G题, 不知道怎么的, 感觉G题有点恶心, 然后直接跳到J题, 一看完就感觉是我的菜(虽然我是搞dp的), 然后推了下规律, 感觉基本差不多了, 于是开始敲了起来, 敲的时候感觉到自己代码能力弱成渣了, 特殊情况一多就直接晕头转向了, 就这样在8点半交了第一发, 然后WA了,

2013-09-23 11:27:11 843

原创 poj 2249 Binomial Showdown

Cmn的模板题, 我感觉自己以前写的模板好挫啊,没办法,重新写了个。comb函数便是。 #include#include#includeusing namespace std;int n, k;__int64 comb(int n,int m){ if(n-m<m) m = n - m; int num = m; __int64 tmp =

2013-09-20 11:07:29 727

原创 poj 3169 Layout

限制条件有点多,看了2遍题才写出来。   for(int i = 1; i      add_edge(i + 1, i, 0);这题算是很简单的啦,每条边ab表示a牛到b牛间的距离小于等于w。 然后初始化时初始化为inf,来求最大距离, 需要判断负环,非连通等。#include#include#includeusing namespace std;const in

2013-09-20 10:43:34 650

原创 差分约束

网络赛搞得心情非常不好啊。   跟着依然做了几道差分约束,其实就是用最短路来解决不等式问题,也算是个简单的算法吧,需要掌握的便是初始化的技巧,这个在baidu上的解释有点绕口,找学长解释了下,直接秒懂。如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题。观察xj-xi例如,考虑这样一个

2013-09-20 10:04:37 753

原创 poj 2366 Sacrament of the sum

又见简单题,数据范围比较小,直接用vis数组来进行标记,然后再输入m个数的时再去寻找,负数的处理可以定一个平衡点,以前的每个数都加上平衡点来构成新的数。然后存储新的数即可,计算的时候需要考虑到自己的平衡点,处理下就ok。#include#include#includeusing namespace std;const int N = 66010;bool vis[N];int

2013-09-17 11:36:42 793

原创 poj 2392 Space Elevator

又开始做背包题了,这题典型的多重背包,不过在进行背包处理之前需要先进行一下排序(限制大的在限制小的之前排肯定不合适),不然dp的结果会出现错误。#include#include#include#includeusing namespace std;const int N = 410;struct node{int num, hig, lim;friend bool ope

2013-09-17 11:17:04 781

原创 poj 2339 Rock, Scissors, Paper

在一个矩阵里面玩 石头剪刀纸,规则大家都懂的,每次如果上下左右的被打败,则其将被取代为胜利者的标志,这里不能用原图来进行处理,所以需要建立个参考矩阵,每次都用参考矩阵来进行判断,然后更改map矩阵的情况,好像这样时间复杂度确实不小,500ms水过。#include#include#includeusing namespace std;const int N = 105;int r

2013-09-17 10:40:45 839

转载 计算几何模板(依然)

ps: 打计算几何模板的时候一定要细心,没把握时要多检查,很多时候就是打模板出错。 #include#define max(a, b)((a)>(b)?(a):(b))   //  代码尽量简洁点。#define min(a, b)((a)const double eps = 1e-8; structPoint{      // 点的表示。    double x,

2013-09-16 14:04:15 703

原创 poj 2245 Lotto

其实就是求所有元素个数为6的所以集合,字典序输出,  我剪纸都没加就直接过了,真可谓水得可以。#include#include#includeusing namespace std;const int N = 13;int n, arr[N];int num[7];void dfs(int j,int k){ if(j > 6) { for(in

2013-09-13 20:31:25 625

原创 poj 1562 Oil Deposits

简单的dfs,就是算可以连成几块的老题,三无题。   #include#include#includeusing namespace std;const int N = 105;int di[8][2] = {1,0,0,1,-1,0,0,-1,1,1,-1,-1,1,-1,-1,1};int row, col;char map[N][N];bool vis[N][N];

2013-09-13 20:12:42 732

原创 poj 2001 Shortest Prefixes

哎,开始理解错题意了,还以为找的是已经存在的字符串,  搞得连个测试数据都过不了,结果看了下别人的博客,才发现又会错了意,哎,做题须谨慎啊。#include#include#includeusing namespace std;const int N = 3010;struct Node{int flag;int count;Node *next[26];}root;

2013-09-13 19:58:41 960

原创 poj 2503 Babelfish

还是字典树的基本题,算是很简答的,注意下数组的大小,我数组开小了,直接运行错误了,求大牛解答怎么算最大的结点数,这个控制条件借鉴了下依然的,第一次看见,竟然还能往缓冲区返回的。#include#include#includeusing namespace std;const int N = 260050;char eng[N][11];int tot;struct Nod

2013-09-13 18:20:50 659

原创 poj 3630 Phone List

开始学字典树了,以前看过AC自动机,但现在感觉和没学一样的感觉,不过字典树还是挺好理解的,不懂的点击打开链接,这题算是字典树的入门题吧,但是需要注意判断的情况,可能别人是它的前缀,或者他是别人的前缀。  #include#include#includeusing namespace std;const int N = 100000;struct Node {bool flag

2013-09-13 17:52:01 745

原创 hdu 4722 Good Numbers

下午满课,没推完就直接上课去了,晚上直接推敲了下,感觉确实挺简单的。  有人用数位dp做的,这种题的通解可以用数位dp的,但是这题比较特殊,可以直接推倒出结果来,考虑到每一位的时候。solve算出的是0到a中满足条件的数的个数。先想清楚一点: 0 ~ 99...999 如果这个都推不出来我就无语了。 例如9438298   第一位为9  则当它为8~0时,他的下面部分是完全的,所以可以

2013-09-11 20:36:32 857

原创 poj 3349 Snowflake Snow

数据太大,为了增加查找的效率,直接用hash来进行处理,其实就是一个2维的表。#include#include#include#include#define MOD 10001using namespace std;int n;typedef struct node{int arm[6];struct node *next;}Node;Node arr[MOD];

2013-09-11 11:49:38 734

转载 哈希表

数据结构:数据间关系 +数据存储方式。常见的数据结构有链表,堆,栈,队列,表,树,图等。选择何种数据结构,取决于需要解决什么样的问题。 哈希表(hash table),即散列表,是根据关键码值(Keyvalue)而直接进行访问的数据结构。其核心思想是选择一个哈希函数或者随机函数,用一个和记录相关的值作为函数的参数,生成存放该记录的块地址。这个算法的优点是寻址的时间复杂度是o(1),缺点是数

2013-09-11 09:58:15 705

原创 poj 3750 小孩报数问题

靠,竟然模拟还得用半个小时。这题直接一个一个慢慢找,数据量实在太小了,最多时间复杂度就是(n*n),被拿出去的数据在vis数组做个标记。#include#include#includeusing namespace std;const int N = 70;char name[N][20];bool vis[N];int num[N], ans, s;int main(vo

2013-09-10 13:29:25 996

原创 poj 3752 字母旋转游戏

简单的模拟题,只要注意到方向就行了,我直接用一个vis数组来进行边界的控制,所以就不需要对map数组进行判断。#include#include#includeusing namespace std;const int N = 100;int row,col;bool vis[N][N];;int map[N][N];int di[4][2] = {0,1,1,0,0,-1,-

2013-09-10 12:54:01 949

原创 poj 2236 Wireless Network

我的方法是暴力加并查集的方法,vis数组记录这个电脑是否已经修好,我用一个map数组记录各个点的之间距离的平方,然后每次输入O字符是,就进行一个暴力,只要距离在d*d范围内的就将其连在一起。如果输入的是S的话,直接就进行查找然后判断其是否在同一个集合中。  注意下,O,S序列是以EOF结束的。  #include#include#includeusing namespace std;c

2013-09-10 11:25:09 886

原创 hdu 4004 The Frog's Games

二分+搜索的好题,以前做过一模一样的题,现在还是没果断刷出来,还得加强训练啊,加油。   二分+搜索的第一步是找好上下限,然后建立二分的模型,最后写搜索函数,这题的搜索还得利用贪心的思想来进行解决,solve函数中每步的距离为step,每次行走的距离应该是小于等于step的最大值,然后一直走下去直到到达目的地,算出行走的步数,然后作为二分判断的依据即可。sto[ n+1 ]必须定义得大点,不然

2013-09-09 20:36:31 885

转载 楼天成回忆录 ACRush

利用假期空闲之时,将这几年 GCJ , ACM , TopCoder 参加的一些重要比赛作个回顾。首先是 GCJ2006 的回忆。Google Code Jam 2006一波三折:Google Code Jam 2006 是我第一次到美国参加现场的程序设计比赛。 Google Code Jam 2006 的比赛地点设在了纽约,这次纽约之行之前的签证出了不小的问题,这里非常感

2013-09-09 19:45:38 1074

原创 poj 1703 Find them, Catch them

并查集的题目,有2个帮派的人,如果不是A帮就是B帮的,现在给你m组数据,里面可能有A(answer)问a,b2个人的情况,或者D(different)a,b2人在不同的帮派内,我也是第一次做这种并查集的题目,看看下别人的思想,确实挺简单的,就是在给一个数组dif,记录与其相反的那个人,开始时初始化为-1,只需要存储一个就可以了。#include#include#include

2013-09-09 13:32:54 692

原创 2013 ACM/ICPC Asia Regional Online —— Warmup简单题题解

1001暴力#include#includeint change(int a){ if(a > 122) return a-26;}int main(){ int i, j, k, ch, a; ch=97; for(i=3; i<=10; i++) { for(j=0; j<i; j++)

2013-09-08 20:56:46 805

原创 poj 3026 Borg Maze

把每个A或S都当成一个节点,然后用bfs来算出各个节点间的距离,然后再进行prim算出最小生成树。#include#include#include#include#define INF 0x3f3f3f3fusing namespace std;const int N = 55;const int M = 105;int di[4][2] = {1,0,-1,0,0,-1,0,

2013-09-08 11:16:44 567

原创 poj poj 2485 Highways

给你邻接矩阵,然后求最小生成树上最长的边,其实就是求prim算法,然后把ans由求和变成求最大值就行。    #include#include#include#include#include#define INF 0x3f3f3f3f#define MAX(a1,b1) (a1)>(b1)?(a1):(b1)using namespace std;const int N = 5

2013-09-07 20:33:15 519

原创 poj 1258 Agri-Net

最小生成树的题,直接用prime就可以解决,模板题吧。     #include#include#include#define INF 0x3f3f3f3fusing namespace std;const int N = 105;int map[N][N], n, ans, dis[N];bool vis[N];void pri(){ vis[1] =

2013-09-07 12:01:50 707

原创 poj 1606 Jugs

与3414类似,基本改几句话就可以直接交了。  #include #include #include #define N 101 using namespace std; int a,b,c; bool vis[N][N]; char str[7][11] = {"lala","fill A","fill B ","pour A

2013-09-07 11:45:00 854

原创 poj 2151 Check the difficulty of problems

需要一定的概率基础,然后加上一定的dp基础就可以直接解决了,我概率也都忘得差不多了,竟然最后连pn是p1的子问题都分不清了,哎,糊涂啊。   i队做一题的概率非常好求(1减去一道题都没做出来的概率),然后所有队的概率相乘就是每队都至少做出一道题的概率,然后算出至少做出1道题,但不存在一个队做出的题数大于等于N的概率,然后2者相减(pn是p2的子问题),算pn的时候需要用到dp,主要的dp状态转移方

2013-09-07 11:13:18 658

原创 poj 2253 Frogger

竟然wa5次,这么真不知道自己dij怎么写搓了,改成floyd就直接a了,这题其实就是最短路的变体,稍微转换一下就可以A了。#include#include#include#include#define INF 100000#define MAX(a1,b1) (a1)>(b1)?(a1):(b1)using namespace std;const int N = 210;t

2013-09-07 10:05:21 594

原创 poj 1915 Knight Moves

需要注意的:给出的坐标是从0开始的。#include#include#include#include#define check(a1,b1) (a1)>0&&(a1)0&&(b1)<=nusing namespace std;const int N = 305;int n,sx,sy,ex,ey;bool vis[N][N];int di[8][2] = {2,1,-2,-1

2013-09-06 21:23:54 675

原创 poj 1979 Red and Black

三简题目: 题目简单,题意简单,代码简单。 #include#include#include#define check(a1,b1) (a1)>0&&(a1)0&&(b1)<=colusing namespace std;const int N = 22;int row,col;char map[N][N];int sx,sy,ans;bool vis[N][N];int

2013-09-06 21:01:22 634

原创 poj 3259 Wormholes

淳朴的bellman或者spfa,好久没写过图论题了,好陌生啊,不过看看模板还是记得起来。    其实这题就是让你求是否存在负环,如果存在YES,否则NO,这题的输入稍微有点变,那个path是双向的,但是虫洞是单向的,在输入路径是要记得将反向的加起来。   #include#include#include#define INF 100000using namespace std;

2013-09-06 20:40:41 568

原创 poj 2240 Arbitrage

题意:套利就是从汇率的转换中赚钱,如果能一种钱对自己的汇率比大于1肯定能套利。简单的floyd模板题吧。 #include#include#include#includeusing namespace std;const int N = 35;string country[N];int n,trade;double arr[N][N];int judge(string

2013-09-06 11:56:31 616

动态规划课件、DP

杭电的DP课件,自己感觉挺好的,大家可以下载下来看看。

2013-04-25

蓝桥杯初赛试题

蓝桥杯初赛试题

2013-03-18

空空如也

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

TA关注的人

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