
Poj解题报告
文章平均质量分 79
mr_zys
这个作者很懒,什么都没留下…
展开
-
Poj 1423 Big Number//数学,阶乘
直接上代码,更多请戳这里#include#include#define Pi 3.141582626535#define e 2.718281828459using namespace std;int main(){ int n,m; cin>>n; while(n--) { cin>>m; int ans;原创 2013-01-18 22:49:56 · 466 阅读 · 0 评论 -
Poj 2828 Buy Tickets
题目大意:反正在哪里都有人会插队,给定n个去排队的买票的人,每个人有两个数据pos和val,pos代表他要插的地方,val代表他的编号。求出最终的队伍是怎样的。题目分析:一开始没扫描思路,感觉可以用链表做,但是是在刷线段树的题目,数亿就往线段树上想。反正自己想不出来,就去看看大牛怎样写。倒着来确定最后的队列。因为最后一个人的位置是定的,他说插到哪里最后的结果就是插在哪里。所以从后往前来解决这道原创 2013-08-17 17:19:48 · 550 阅读 · 0 评论 -
Poj 2528 Mayor's posters - 线段树
题目大意:给n张海报,然后将这n张海报贴在宣传板上,问最后能被看见的海报有多少张。题目分析:还是线段树,区间去改问题。但是要注意贴海报的顺序。 假设当前在贴第i张海报[a,b],如果在[a,b]内子区间没有被覆盖,那么说明可以看到它,否则,它被完全覆盖 依次贴原创 2013-08-28 15:19:04 · 669 阅读 · 0 评论 -
Poj 1151 Atlantis - 线段树
题目描述:在一平面内,给定一组矩形,求这些矩形占据的面积。 题目分析:根据上图,可以想到将这些矩形分割为图中红线和黑线组成的矩形的面积 根据Poj 3277 City Horizon - 线段树的作法,将图中的黑线扫描到y轴上,然后求出这些黑线占据的红线长度。 总面积为原创 2013-08-28 15:18:26 · 762 阅读 · 0 评论 -
Poj 3468 A Simple Problem with Integers - 线段树
题目大意:给定一组数据,然后对应两个操作 Q a b 查询[a,b]的和 C a b c 将[a,b]的数字都加上c题目分析:赤裸裸的区间求和和区间修改,可以用树状数组做的,但是这里是练习线段树。所以用线段树做。 每次要修改[a,b],不需要直接修改到叶子原创 2013-08-24 23:36:42 · 528 阅读 · 0 评论 -
Poj 3264 Balanced Lineup - 线段树
线段树水题,每个结点保存两个信息,当前区间的最大、最小值,但是容易TLE。下面是代码:#include #include using namespace std;#define maxn 50500#define INF 100000000int h[maxn];int min_h,max_h;struct Node{ int l; int r;原创 2013-08-24 16:30:03 · 553 阅读 · 0 评论 -
Poj 2800 Joseph's Problem - 找规律
题目大意:给定n和k,求 ∑1(k mod i)题目分析:n和k很大,直接算会TLE,但是可以先打表找规律。(点击可见数学推导) 随便找几组数据可以发现下面的规律 1)如果k/i的值相等,那么kmodi的值成等差数列(连续的) 2)如果k比n大,那么k/i的值随i的值原创 2013-08-24 10:55:13 · 1167 阅读 · 0 评论 -
Poj 3277 City Horizon - 线段树
题目大意:在水平直线上给定一组矩形,这些矩形的底边在同一水平线上,求这些矩形占据的面积。题目分析:很显然,这些矩形的长和高都不一样,还会有重合的区域。如何求这些矩形的面积呢?画个图就知道了。 对于上图给定的三个矩形,最快的求面积的方法就是将每条线段乘以当前该条线段对应的最高的高。譬如 A1-B1对应的最高的是H1,原创 2013-08-23 15:57:49 · 1808 阅读 · 1 评论 -
Poj 1977 Odd Loving Bakers//矩阵
这道题,推一下关系式就出来了。 下面是代码:#include#include#include#includeusing namespace std;const int maxn = 100 + 10;string s;char str[maxn];map Map;struct node{ int m[maxn][maxn]; void init()原创 2013-07-21 21:15:57 · 676 阅读 · 0 评论 -
Poj 1960 Period//kmp
如果P[1...K]与P[L-k+1...L]匹配(L为字符串长度),那么P[L-k+1...L]这一段字符一定是在重复P[1...L] - P[L-K+1...L]这段字符。 反证法:如果不是重复这一段,那么P[1...K]与P[L-k+1...L]不可能匹配。可以画图试一试。 注意字符串开始位置是0.下面是代码:#include#include#define m原创 2013-07-18 19:34:28 · 696 阅读 · 0 评论 -
Poj 1190 生日蛋糕//回溯,减枝
首先吐槽一下求面积和体积不用π。其实不减枝的代码还是很好写的://m为蛋糕的层数//v为当前已涂的体积//s为当前已涂得到的S//r和h为当前层的半径和高void dfs(int m,int v,int s,int r,int h){ //推出条件 if(m == 0) { if(ans > s && v == N) an原创 2013-07-17 21:12:32 · 1068 阅读 · 0 评论 -
Poj 2513 Colored Sticks//Trie+并查集+欧拉通路
这道题可以直接看出是用欧拉通路来做,但是数据特别大,只能想办法压缩数据。所以用Trie树来储存几万种颜色,并给这些颜色标记为相应的结点。 下面是代码:#include#include#define maxn 510000int ch[maxn][26];int val[maxn];int degree[maxn];int f[maxn];int cnt;int ID;原创 2013-07-17 14:18:48 · 704 阅读 · 0 评论 -
Poj 2503 Babelfish//Trie树
这道题目就是裸的Trie树,当然了也可以用其他方法做。这里为了训练的目的用Trie树做。就是这道题的输入让人蛋疼。Orz下面是代码,哈哈自己写的Trie的模板。#include#include#define maxn 200010struct node{ char val[11]; int ok;} Val[maxn];int ch[maxn原创 2013-07-16 11:21:29 · 614 阅读 · 0 评论 -
Poj 1014 Dividing//多重背包
什么是多重背包呢? 有N 种物品和一个容量为V 的背包。第i 种物品最多有Mi 件可用,每件耗费的空间是Ci,价值是Wi。求解将哪些物品装入背包可使这些物品的耗费的空间总和不超过背包容量,且价值总和最大。 其中,如果Mi*Ci >= V,那么这时多重背包等于完全背包问题。否则,将多重背包转化为01背包做,但是要优化一下。(优化思想很巧妙,)。伪码见下:原创 2013-06-05 16:56:44 · 589 阅读 · 0 评论 -
Poj 2677 Tour//DP
/*Poj 2677 TourDP 双调欧几里得旅行商问题转移方程 :当j = i - 1: d[i][i-1] = min{d[i-1][k] + p[i][k]} (1<=k<i-1)当j < i - 1: d[i][j] = d[i-1][j] + p[i-1][i]*/#include#include#include#define Min(a,b) (a<b?a:b)u原创 2013-05-29 20:55:19 · 629 阅读 · 0 评论 -
Poj 2186- Popular Cows//kosaraju
Popular CowsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 19089 Accepted: 7678DescriptionEvery cow's dream is to become the most popular cow in the he原创 2013-05-06 15:00:06 · 564 阅读 · 0 评论 -
Poj 1401 Factorial
这是一道水题,不解释来。#includeint main(){ int n,ans; //freopen("a.txt","r",stdin); //freopen("b.txt","w",stdout); scanf("%d",&n); while(n--) { int T; scanf("%d",&T);原创 2013-02-27 15:17:31 · 571 阅读 · 0 评论 -
Poj 2255-Tree Recovery//二叉树,递归
这道题思路很简单,但是不好写递归!自己的递归思想弱爆了。 每次将先序和中序分为两个部分,一个是左子树,一个是右子树。不断的递归到结束为止! 下面是代码: #include#include#define MAXN 100char s1[MAXN],s2[MAXN],s[MAXN];void rebuild(int n,char *s1,char *s2,char原创 2013-02-06 21:41:38 · 511 阅读 · 0 评论 -
Poj 3321 Apple Tree - 树状数组
题目分析:这道题的难点是如何构造一个区间。用dfs来确定区间,然后直接用树状数组做。PS:用vector来存储边可能会超时下面是代码:#include #include #define maxn 101000struct Node{ int v; int next;} node[maxn<<1];int n,m,cnt,num;int a[maxn原创 2013-09-01 16:56:10 · 613 阅读 · 0 评论