POJ
文章平均质量分 63
Anonymous-邦
阿里巴巴家种芝麻的
展开
-
POJ3468A Simple Problem with Integers
#include#include#includeusing namespace std;struct CNode{ int L,R; CNode* pLeft,* pRight; long long Inc; long long nSum;};CNode Tree[200010];int nCount=0;int Mid(CNode* pRoot)原创 2014-07-20 21:46:52 · 755 阅读 · 0 评论 -
POJ3414 Pots(BFS)
倒水问题。题意:给两个杯子,容积分别为A和B。通过从水龙头接水(每次都接满),把杯里水全倒掉,把一个杯子里的水倒到另一个杯子里面三种操作使其中一个杯子里的水为C。解题思路:6入口的BFS。难点在如何保存路径。#include#include#include#include#includeusing namespace std;bool vis[110][110];str原创 2014-09-24 07:25:54 · 879 阅读 · 0 评论 -
POJ3009 Curling 2.0(DFS)
迷宫问题求最短路。略有不同的是如果不碰到石头的话会沿着一个方向一直前进,出界就算输了。碰到石头,前方石头会消失,冰壶停在原地。把这个当作状态的转移。DFS可以求出其最小操作数。#include#include#include#include#include#include#include#include#define ll __int64#define INF 0x3f3f3原创 2014-10-06 16:49:08 · 746 阅读 · 0 评论 -
POJ3669 Meteor Shower(BFS)
题意解析:在平面坐标系中,从原点出发,上下左右四个方向可走,一些点在T[i]秒后会有炸弹降落。在T秒包括T秒后这些点(包括周围四个方向的点)都不能到达,求如何在最短时间内到达安全地点。#include#include#include#include#include#include#include#include#define ll __int64#define INF 0x3原创 2014-10-06 20:35:05 · 704 阅读 · 0 评论 -
POJ2386 Lake Counting(DFS)
从任意的W开始,不停地把邻接的部分用'.'代替。1次DFS后与初始的这个W连接的所有W就都被替换成了'.',因此直到图中不再存在W为止,总共进行DFS的次数就是答案了。8个方向共对应了8种状态转移,每个格子作为DFS的参数至多被调用一次,所以复杂度为O(8×N×M)=O(N×M)。#include#include#include#includeusing namespace std;原创 2014-09-29 22:46:55 · 715 阅读 · 0 评论 -
POJ3187 Backward Digit Sums
给出杨辉三角的顶点值,求底边各个数的值。直接DFS就好了#include#include#include#include#include#include#include#include#include#include#define ll __int64#define INF 0x3fffffff#define rep(i,n) for(int (i)=0;(i)<n;(原创 2014-10-08 23:49:56 · 874 阅读 · 0 评论 -
POJ2376 Cleaning Shifts(贪心)
给出每头奶牛的覆盖区间,求最少几头奶牛可以覆盖[1,T]这个区间。(有个问题需要注意一下,比如T=10,1-5,6-10这就算全部覆盖了,覆盖的是点)#include#include#include#include#define rep(i,n) for(int (i)=0;(i)<n;(i)++)using namespace std;struct Node{ int原创 2014-10-09 23:57:48 · 855 阅读 · 0 评论 -
POJ3253 Fence Repair(贪心)
切割木板的顺序是自由的,所以每次选择两块最短的板,组合在一起,加入队列,原来两个板出队,直到队列中为空或者只剩下一个板时结束。这里使用优先队列较为方便。#include#include#include#include#include#define ll __int64using namespace std;int len[20005];int main(){ //原创 2014-10-01 17:04:22 · 942 阅读 · 0 评论 -
POJ1064 Cable master(二分)
本题用二分搜索可以很容易的求出答案。设条件C(X)为可以得到K条长度为X的绳子,C(x)=(floor(L(i)/x))。X的初始范围为(0,Max(L(i))+1)。#include#include#include#include#includeusing namespace std;double a[10005];int n,k;void solve(double l,原创 2014-10-12 10:52:01 · 865 阅读 · 0 评论 -
POJ2431 Expedition(排序+优先队列)
思路:先把加油站按升序排列。在经过加油站时,往优先队列里加入B[i].(每经过一个加油站时,预存储一下油量)当油箱空时:1、如果队列为空(可以理解成预存储的油量),则无法到达下一个加油站,更无法到达目的地。 2、否则就取出队列里的最大元素,来给汽车加油(贪心思想)#include#include#include#include#in原创 2014-10-03 17:14:02 · 876 阅读 · 0 评论 -
POJ2456 Aggressive cows(二分+贪心)
假设C(d)为满足所有牛之间的距离都不小于d。先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d。#include#include#include#include#include#include#include#include#include#include#define ll __int64#define INF 0x3fffffffusing namespace原创 2014-10-13 19:58:50 · 1131 阅读 · 0 评论 -
POJ3061 Subsequence(二分前缀和法+尺取法)
二分+前缀和法满足条件的子序列长度在(0,n)之间,sum[x+i]-sum[i]为从从第i个元素开始序列长度为x的元素的和。前缀和可在O(n)的时间内统计sum[i]的值。再用二分找出满足条件的最小的子序列长度。#include#include#include#include#include#include#include#include#include#inclu原创 2014-10-14 21:39:52 · 980 阅读 · 0 评论 -
POJ2229 Sumsets
d[i]表示数字i的方案数,分为两种情况:i位奇数时,d[i]=d[i-1],这个很容易想到。i为奇数时,第一个数为1时,d[i]=d[i-1];第一个数为偶数时,d[i]=d[i/2].所以d[i]=d[i-1]+d[i/2]#include#include#include#include#include#include#include#include#include原创 2014-11-07 13:01:32 · 678 阅读 · 0 评论 -
POJ 2823 Sliding Window(单调队列)
题意:给定一个长度为n的序列,依次求出(i,i+k-1) (i∈(0,n-1),i本题有多种解法。首先,暴力的时间复杂度是O((n-k)*klogk),所以pass。解法1:维护一个单调递增的队列(手写),队头即为最小值。同理求出最大值。解法2:维护一个优先队列(priority_queue即可)解法3:线段树这里给出单调队列解法:#include#inc原创 2015-03-02 17:39:21 · 784 阅读 · 0 评论 -
POJ 2785 4 Values whose Sum is 0(双向搜索+二分)
题意:给4个数组,从每个数组中选一个数,求出4个数和为0的方案数。分析:暴力时间复杂度为N^3,肯定不行。所以考虑先把ab、cd的和分别求出来。-(a+b)=c+d即满足条件,求和复杂度为N*N。ab数组为-(a+b),cd数组为(c+d)。从cd数组里找等于ab数组的即可。这里可以先给数组排序 ,然后用二分搜索找。复杂度为O(N*N*logN)。#include#include#原创 2015-04-04 21:33:00 · 478 阅读 · 0 评论 -
POJ2774 Long Long Message(后缀数组入门题)
题意:求两个字符串的最长公共连续子串#include#include#include#include#include#include#include#include#include#include#include#define ll __int64#define maxn 200010using namespace std;const int INF=0x3原创 2015-09-14 19:33:33 · 430 阅读 · 0 评论 -
POJ3083 Children of the Candy Corn(BFS+DFS水题)
#include#include#include#include#includeusing namespace std;char map[50][50];bool vis[50][50];int ldir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};int rdir[4][2]={{0,-1},{1,0},{0,1},{-1,0}};int n,m,a原创 2014-08-29 18:39:40 · 447 阅读 · 0 评论 -
POJ1426 Find The Multiple
模拟BFS解法+DFS解法原创 2014-08-30 00:04:03 · 484 阅读 · 0 评论 -
POJ3264Balanced Lineup(最基础的线段树)
采用一维数组建树。(因为一维数组建的是完全二叉树,时间上比用孩子节点指针建树慢,不过基本可以忽略=-=)#include#include#includeusing namespace std;const int INF = 0xffffff0;int minV=INF;int maxV=-INF;struct Node{ int L,R; int minV,ma原创 2014-07-20 21:43:22 · 757 阅读 · 0 评论 -
POJ1258最小生成树(prim算法)
POJ1258思路:首先把第一个结点加入树中,每次往树中加入一个结点,加入的结点必须是与当前树中的结点距离最小那个点,这样每次把结点加入树中选取的都是最小权值,循环n-1次后把所有结点都加入树中。#include#include#includeusing namespace std;const int MAXN = 1e9;//创建map二维数组储存图表,low数组记录每2个点原创 2014-06-11 17:15:23 · 1015 阅读 · 0 评论 -
poj_2823(单调队列)
一道裸的单调队列,求区间最值问题。线段树8秒多过,单调队列4秒多过。可作为单调队列的学习题目原创 2014-08-05 01:08:49 · 1095 阅读 · 0 评论 -
poj2253Frogger(弗洛伊德)
#include#include#include#include#includeusing namespace std;double map[210][210];double x[210],y[210];int n;int main(){ //freopen("d:\\test.txt","r",stdin); int t=1; int i,j,k原创 2014-08-20 21:58:17 · 598 阅读 · 0 评论 -
poj1860 Currency Exchange(bellman+spfa解法)
bellman加spfa两种解法,均采用vecotr建邻接表,spfa用queue实现原创 2014-08-16 19:59:34 · 788 阅读 · 0 评论 -
poj1062昂贵的聘礼(dijkstra)
#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;int n,m;struct Node{ int p,l,x; int num[110]; int val[110];} goods[110];int map[110][110];原创 2014-08-20 22:00:40 · 438 阅读 · 0 评论 -
poj2240 Arbitrage(floyd)
#include#include#include#include#include#includeusing namespace std;double G[35][35];int n,M;void floyd(){ for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) {原创 2014-08-22 12:44:26 · 523 阅读 · 0 评论 -
poj2389 Bull Math(大数java)
import java.math.*;import java.util.*;public class Main{ public static void main(String[] args){ Scanner cin=new Scanner(System.in); BigDecimal ans=BigDecimal.ONE; while(原创 2014-08-22 16:40:05 · 687 阅读 · 0 评论 -
poj3982 序列(java大数)
import java.math.*;import java.util.*;public class Main{ public static void main(String[] args){ Scanner cin=new Scanner(System.in); while(cin.hasNext()){ BigInteger[] n原创 2014-08-22 17:24:51 · 520 阅读 · 0 评论 -
poj2602 Superlong sums(高精度)
#include#include#includeusing namespace std;const int M=1000005;char a[M],b[M],ans[M];int main(){ int n,i,t,w; while(scanf("%d",&n)!=EOF) { getchar(); for(i=n-1;i>=原创 2014-08-22 17:07:42 · 660 阅读 · 0 评论 -
poj1002 487-3279(哈希)
hash+sort#include#include#include#include#define N 100005using namespace std;int num[N];int exc(char a){ if(a=='A'||a=='B'||a=='C') return 2; if(a=='D'||a=='E'||a=='F') return 3;原创 2014-08-27 13:58:05 · 703 阅读 · 0 评论 -
POJ1007 DNA Sorting(求逆序数)
#include#include#include#includeusing namespace std;int n,m;struct DNA{ int num; char sq[55];}dna[110];int cmp(DNA a,DNA b){ if(a.num==b.num) return 0; return a.num<b.num;原创 2014-08-28 12:31:48 · 671 阅读 · 0 评论 -
POJ 2388 Who's in the Middle(排序)
#include#include#include#include#define N 10005using namespace std;int a[N];int n;int main(){ //freopen("d:\\test.txt","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++) {原创 2014-08-28 12:45:25 · 463 阅读 · 0 评论 -
POJ 1904 Brainman(归并求逆序数)
#include#include#include#includeusing namespace std;int a[1005];int c[1005];int n,cnt;void MergeSort(int l, int r){ int mid, i, j, tmp; if( r > l+1 ) { mid = (l+r)/2;原创 2014-08-28 14:14:30 · 829 阅读 · 0 评论 -
POJ2488 A Knight's Journey(DFS)
#include#include#include#includeusing namespace std;int p,q;bool chess['Z'+1][27];int dis[8][2]= {{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};struct Node{ int x; char y;原创 2014-08-28 21:59:11 · 450 阅读 · 0 评论 -
poj1743 Musical Theme(后缀数组+二分判定)
题意:求不重叠最长重复子串#include#include#include#include#include#include#include#include#include#include#include#define ll __int64using namespace std;const int INF=0x3fffffff;const int maxn =2000原创 2015-09-15 16:25:40 · 386 阅读 · 0 评论