自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Booky的专栏

Actions speak louder than words.

  • 博客(114)
  • 收藏
  • 关注

原创 POJ 2106:Boolean Expressions 计算布尔表达式 - 堆栈

题意:bool表达式求值,V:true;F:false题解:堆栈+优先级判定给的输出样例比答案少一行==#include#include#includeusing namespace std;const int N = 110;int val[N], vtop, op[N], otop;//数值栈;运算符栈;栈顶指针void ins(int b){ while(otop

2015-05-30 16:13:20 1183

原创 POJ 1363 : Rail - 栈

题意:按1~n进栈,然后给出一个顺序,看能否按照这个顺序出栈#include#include#includeusing namespace std;int main(){ int a[1005], b[1005], i, j, k, n; while(scanf("%d", &n), n){ while(scanf("%d", &b[0]), b[0]){ for

2015-05-30 15:52:50 570

原创 POJ 2413 : How many Fibs? - JAVA大数! / 二分查找+大数加法

给出两个数a,b (a 大数!PS:大数没有a==b这种形式,要用a.compareTo(b),返回1,0,-1坑:这里的斐波那契数列是以 1 2 3 5 8开始,不是 1 1 2 3 5 8import java.util.*;import java.text.*;import java.math.*;public class Main {

2015-05-30 14:48:24 684

原创 BestCoder 2015百度之星资格赛1003 IP聚合 -

Problem Description当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址。网络地址等于子网掩码与 IP 地址按位进行与运算后的结果,例如:子网掩码:A.B.C.DIP 地址:a.b.c.d网络地址:(A&a).(B&b).(C&c).(D&d)

2015-05-25 21:15:02 805

原创 BestCoder 2015百度之星资格赛1001大搬家 - 递推 组合数学

Problem Description近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上。指示的内容是坐在位置i上的人要搬到位置j上。现在B厂有N个人,一对一到N个位置上。搬家之后也是一一对应的,改变的只有位次。在第一次搬家后,度度熊由于疏忽,又要求大家按照原指示进行了一次搬家。于是,机智的它想到:再按这个指示搬一次家不就可以恢复第一次搬家的样子了。于是,B厂史无前例的进行了

2015-05-25 13:17:31 769

原创 POJ 2406/ POJ 1961/ POJ 2752——几个相似的简单KMP问题

都是KMP问题,函数也都差别不大。

2015-03-19 21:09:26 522

原创 POJ 2192 / ZOJ 2401 : Zipper - DP

大致题意:给定三个字符串A、B、C;判断C能否由AB中的字符组成,同时这个组合后的字符顺序必须是A,B中原来的顺序,不能逆序。也就是C是否能由A、B穿插组成。例如     A:mnl,B:xyz;如果C为mnxylz,就符合题意;如果C为mxnzly,就不符合题意,原因是z与y顺序不是B中顺序。输入:第一行n,表示数据组数每组数据一行,三个字符串,中间用空格

2015-03-05 22:17:20 577

原创 POJ 1782/ ZOJ 2240 : Run Length Encoding - 字符串处理(模拟)

题意需要稍微理解一下。如果是连续的数就打印他的长度和字符,但不能超过九个如果是不连续的,那么就在这段不连续的字符两边各打印一个1,如果是是字符1就打印11,否则打印字符本身#include#include#includeusing namespace std;const int N = 1100;char str[N], s[N];int a[N];int main()

2015-03-05 22:13:39 582

原创 POJ 2126 / ZOJ 2431 : Factoring a Polynomial - 易(判断多项式是否能够分解)

输入:一组测试样例。第一行n,表示多项式的度(0~20);下一行给出n + 1个整数,an a[n-1], …, a[0],表示多项式系数(-1000~1000,且不等于0)输出:如果不可化简输出YES,否则输出NO。(第一次交的时候搞反了……)思路:如果n 如果n > 2,一定可以化简,这是能够证明的,NO;(实系数多项式因式分解定理  每个次数大于零

2015-03-04 23:34:13 702

原创 POJ 2527 : Polynomial Remains - 多项式除法

多项式除法取余。也可模拟。输入:多个测试样例,每个样例第一行是n、k(0~10000),第二行n+1个整数给出a(x)的系数,以a0开始,an结束。n = k = -1时输入结束。输出:对每个测试样例输出余数的系数。从常量系数r0开始。若余数是0,则输出常量系数0;否则若余数是d次的,就要输出d + 1个系数,之间用空格隔开。思路:多项式各项系数存储

2015-03-04 23:26:44 603

原创 POJ 1050/ ZOJ 1074:To the Max - DP求子矩阵和

题意:即最大子段和问题在二维空间上的推广思路:一维的情况:设有数组a0,a1…an,找除其中连续的子段,使它们的和达到最大。假如对于子段:9 2 -16 2dp[i]表示:以ai结尾的子段中的最大子段和。在已知dp[i]的情况下,求dp[i+1]的方法是:如果dp[i] > 0,dp[i + 1] = dp[i] + ai(继续在前一个子段上加上ai);否则dp[i + 1] = ai(不加上前面

2015-01-10 22:28:03 693

原创 今天把以前博客搬家到这里了

以前在网易博客写,因为界面更美观的缘故。不过觉得,有人能够相互交流才会促进自己更认真写题、写题解,这里应该更有助于猿类交流吧。whai、天哥也在CSDN写题解了。希望同道中人可以多加指点吧!

2015-01-10 21:55:29 520

原创 POJ 1018:Communication System - DP

POJ 1018 题意: 某公司要建立一套通信系统,有n个厂家提供生产所需要的网线。而每个厂家生产的同种网线都会存在两个方面的差别:带宽bandwidths 和 价格prices。 现在需要在每个厂家选择一件网线,考虑到性价比问题,要求所挑选出来的n件设备,要使得B/P最大。输出这个比值保留3位小数。(其中B为这n件设备的带宽的最小值,P为这n件设备的总价。)思路: dp[i][j]:取到第 i

2015-01-10 21:47:32 508

原创 一些以前没做的简单DP

1- POJ 1458 最长公共子序列长度   状态转移方程:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); 2- POJ 1159 给定一个字符,最少插入多少字符使其成为回文串 滚动数组d[i % 2][j] = d[(i - 1) % 2][j] + d[i % 2][j - 1]作用是节省空间,在时间上没有优势。 状态转移方程:dp[i % 2][j]

2015-01-10 21:47:28 460

原创 POJ 3069 : Saruman\'s Army - 贪心

大意:给出一维直线上n个点的相应坐标,和一个参数——距离R,给n个点中尽可能少的点做标记,使得n个点中,任意一个点,在R距离内都有被标记的点。思路:首先从最左边开始考虑,显然,从左边起,标记的第一个点,在最左边点的右侧。且选择距离R内 距离其最远的点。接着,把上一次标记的这个点  能影响的最右边的点  的下一个点,作为最左边的点,开始又一次标记。#include#include#include#i

2015-01-10 21:47:25 509

原创 POJ 3461 : Qualification - 字符串匹配,KMP算法

大致题意:给出一个字符串,一个文本,输出这个字符串在文本中出现的次数。思路:w是模式,t是目标。应用KMP算出w的后缀函数next,然后使用next计算单词w在文本t中出现的频率cnt。KMP KMP#include#include#includeusing namespace std;const int W = 10010, T = 1000010;int match(char w[], cha

2015-01-10 21:47:21 599

原创 POJ 3080/ ZOJ 2784 : Blue Jeans - 串匹配,最长公共子串

大致题意:给出一个DNA序列集合,求在所有序列中都出现的最长的碱基序列。(碱基序列e.g.:TAGACC)若有多个,输出字典序最小的一个。这里用朴素算法做的…可用KMP多多练手 。。#include#include#includeusing namespace std;const int M = 15, S = 65;int main(){ int t; scanf("%d", &t); whil

2015-01-10 21:47:18 761

原创 POJ 2246/ ZOJ 1094 : Matrix Chain Multiplication - 矩阵相乘,模拟

大致题意:计算数个矩阵乘法,需要相乘的次数。思路:2个矩阵m*n、n*l的数值矩阵A、B相乘,成绩存入m*l的数值矩阵C,相乘次数为m*n*l。使用一个字符指针p,1-@-当前字符为“(”,则字符指针+1,递归计算括号内表达式t1、t2,p+1。 若t1、t2行数不相等,失败标志error设为1; 否则计算相乘后的乘积矩阵t。[ t.rows ; t.cols ; t.mults ]2-@-当前字

2015-01-10 21:47:14 717

原创 POJ 1060/ ZOJ 1026 : Modular Multiplication of Polynomials - f(x)g(x) mod h(x)

多项式乘法、模除题意:给出f(x),g(x),h(x)的 (最高次幂+1)的值,以及它们的各项系数,求f(x)*g(x)/h(x)的余数。这里多项式的系数只有1或0,因为题目要求:这里多项式的加减法是将系数相加/减后再模2,这样其实也就可以用异或运算来代替加减法。思路:主要在于把除法转化成减法,一次一次减。用sum[]数组存结果,最高次幂为ls,各项系数存在f[ls-1 … 0]1 - 计算乘积,

2015-01-10 21:47:10 901

原创 POJ 1988 : Cube Stacking - 简单并查集

题意:有N(N堆方块,开始每堆都是一个方块。方块编号1–N.有以下两种操作:M x y :表示把方块x所在的堆,拿起来叠放到y所在的堆上。C x : 问方块x下面有多少个方块。操作最多有P (P次。对每次C操作,输出结果。输入:M x y :表示把方块x所在的堆,拿起来叠放到y所在的堆上。C x : 问方块x下面有多少个方块。输出:C的结果。思路:除了par数组,还要开设辅助数组:sum[]:

2015-01-10 21:47:07 585

原创 POJ 1062 : 昂贵的聘礼 - 最短路Dijkstra+枚举(难)

dijkstra处理权值非负情形,最近才开始看最短路。题目大意:(中文题容易理解)大致就是说,最终要得到酋长的许诺,每件物品可能有其他物品(1件)能让此物品价格优惠,你可通过交易获得物品从而以最少金钱达到酋长许诺。交易受到“等级限制”。其中的等级限制处理需要一定的技巧,细节一定要处理好!输入:(单Case输入)第一行两个整数M,N(1 接下来依次给出了编号1~N的物品的描述:每个物品的描述——第一

2015-01-10 21:47:03 590

原创 POJ 1966 / ZOJ 2182 : Cable TV Network - 顶点连通度

题意:输入 中继器 线缆数目(即图中点,边的数目)m,n;m对数据 表示中继器连接情况(即点的连通情况)。需要输出 网络的安全系数——即这里无向图的顶点连通度分析:构造一个容量网络,得到邻接矩阵;求每一对顶点的独立轨数目时,可固定源点,枚举每个汇点,记录最小的独立轨数目,即 所求的顶点连通度。******顶点连通度的求解,要转换成网络最大流问题。#include#include#includeus

2015-01-10 21:46:59 567

原创 ZOJ 3770 : Ranking System (第14届浙江大学程序设计竞赛 D) - 结构体排序,vector

【分析】先按题目要求排序——我是写了俩排序函数,再按照等级人数限制进行划分即可。读入的各种数据存在结构体中,对结构体按成员排序用vector很方便——今天现学的——书到用时方恨少啊,唉。#include#include#include#include#includeusing namespace std;const int N=2005;int d[7];struct Memb{ int sc,y

2015-01-10 21:46:55 706

原创 POJ 1631 : Bridging signals - 最长上升子序列 O(nlog n)

题目大意:给定两个相同序列,单个序列中数字不会重复,x出现在y位置,即代表x与y可以连线。最后要从这个序列中尽量多地选择连线并保证连线不交叉。思路:一个序列已经固定,那只要保证另一列被选择的数是递增的就不会相交了,画几个模拟就明白,模拟过程参考http://www.cnblogs.com/zhsl/archive/2013/05/21/3089983.html,红色航线是合法的,那么他们满足什么规

2015-01-10 21:46:52 558

原创 POJ 2533 : Longest Ordered Subsequence - LIS问题

最长不降子序列问题, 同学报告中的题。一道简单的DP。题意:给定 n 个整数 A1A2....An,按从左到右的顺序选出尽量多的整数,组成一个上升子序列,输出最长子序列的长度。分析:I.最简单思路,d[i]表示从左到第 i 个数选出最长的子序列长度,d[i]=max(0,d[j])+1 (jII.进一步思考,发现我们的程序造成了大量的浪费:对于每一个 d[i],j 都会从 0 到 i-1 开始逐步

2015-01-10 21:46:48 538

原创 POJ 3176 : Triangle - 水DP

额,算是完全我自个儿敲出的第一道DP了吧……好水的DP~瞬间有那么点信心了?同学报告里的第一个题。题意:拿图说话,题意看图便好理解了。Explanation of the sample:  7 * 3 8 * 8 1 0 * 2 7 4 4 * 4 5 2 6

2015-01-10 21:46:45 433

原创 POJ 1276 : Cash Machine - 多重背包

最基础的多重背包#include#include#includeusing namespace std;const int N=100005;int cash,k,n[N],w[N],c[N],dp[N],cnt[N]; //cnt[]限制取bills的个数int main(){ int i,j; while(~scanf("%d%d",&cash,&k)){ for(i=0;i scanf

2015-01-10 21:46:41 463

原创 带分数 - 搜索,next_permutaion妙用

蓝桥杯历届试题练习搜索题,用上全排列next_permutation就不必写很烦很烦的搜索模拟了另外,next_permutation(p,p+l);的返回值是bool型,常用在do{}while(next_permutation(p,p+l));这样的环境下,应该是当其值为0时,全排列一遍生成完毕。它的排列顺序——例如,对“abc”而言,输出为:abcacbbacbcacabcba#includ

2015-01-10 21:46:38 801

原创 #include<list>类的用法

本文转载Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一

2015-01-10 21:46:34 1907

原创 POJ 3177 / POJ 3352 : Redundant Paths / Road Construction - 边双连通分量,缩点

题意:给定现有的R条直接连接2个牧场的路,F-1分析:见代码及注释……《图论算法理论实现应用》——P4123177Accepted700K16MSG++2320B2014-03-14 16:55:30(啊,今天是过3177后的第三天晚上==!)接着做练习题发现3177和3352是一模一样的……只是数据范围不同罢了。3352Accepted760K16MSG++2320B2014-03-16 20:

2015-01-10 21:46:31 551

原创 POJ 2714 : Random Walk - 贪心

这题用到的那个关于定义运算符的方法不太懂!分析参考:http://www.cnblogs.com/LyonLys/archive/2012/08/20/poj_2714_Lyon.html因为每个向量的方向都不同,所以就可以将向量按圆周顺序排一下序,然后枚举每半个圆周的向量和,找出最大值就行了。这里是用了贪心的思想,尽量将向量放到同一侧,这样就可以尽可能大的构造一个和向量!2714Accepted

2015-01-10 21:46:27 803

原创 POJ 1835 : 宇航员 - 模拟,三维向量旋转

(OJ 寒假马拉松 第五场 E题)从别人博客看到较精炼的解法思路:用一个三维向量记录人的身体朝向的信息——面朝的方向,身体竖直方向向上的方向,人左臂平伸的方向。6种变换就是对这个向量的操作。(详见代码)注意:题目是左手坐标系另外可以参考这里,方法相同。#include#includeusing namespace std;int main(){ char s[10]; int t,n,x,y,z,

2015-01-10 21:46:23 657

原创 POJ 2677 / ZOJ 2581 : Tour - DP

双调欧几里德旅行商问题,(寒假马拉松 第一场 J题)dps[i][j]代表走的快的人到达i,走的慢的人到达j时的最小距离。当连接新的点i+1时,如果给j,则j就超过了i,成为了更快的人,下一状态变成dp[i+1][i]。如果给i,给j保持不变,下一状态为dp[i+1][j]。由此得到递推公式:dps[i+1][i] = min(dps[i+1][i], dps[i][j] + dis(j, i+1

2015-01-10 21:46:20 546

原创 POJ 2756 : Autumn is a Genius - java大数

(寒假马拉松 第八场 B题)java解法参考C++解法:小灰灰的高精度高精度 参考import java.io.*;import java.util.*;import java.math.*;public class Main{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); int i,n=

2015-01-10 21:46:16 570

原创 POJ 2973 : Scrabble - 字符串

(寒假马拉松 第二场 B题)字符串处理题意:判断最后一个字符串是否可以组成前面的字符串,输出可以组成的数量,‘_’代表可以任意字母。In the first test case, PIZZA, ZA and PITA can be spelled as PIZ_A, ZA and PI_A. There are not enough letters to spell PROGRAM or CONT

2015-01-10 21:46:11 532

原创 POJ 2796 : Feel Good - 区间运算最值

(寒假马拉松第一场 G题)题意:本题主要就是要求一个数列里面,连续的几个数的和乘以这个连续段里最小的一个数,在所有这样连续数列里最大的一个分析:我是简单模拟着做的,直接输出最大值就可以了。网上很多都说,用单调栈 / 单调队列,要去学习学习!2796Accepted2612K797MSG++849B2014-02-10 17:07:51#include#include#include#define

2015-01-10 21:46:07 506

原创 POJ 2818 : Making Change - dfs

(寒假马拉松第一场 P题)题意:商店有面值为25分、10分、5分、1分的硬币,给出各硬币的数量和要找给顾客的钱数,问怎么使找给顾客的总的硬币数最少。分析:DFS,最暴力的方法是枚举所有的情况;——POJ 此题数据较弱,暴搜即可AC再加上优化:已经满足钱数 或 已经超过钱数,则不再搜索,——当数据量大时则须优化,以免TLE。#include#includeusing namespace std;in

2015-01-10 21:46:04 537

原创 POJ 2680 / ZOJ 2584 : Computer Transformation - 打表+找规律+高精度 / java大数

(寒假马拉松第一场 O题) java大数这么有用啊@_@java得熟练熟练,今天交题才发现就要忘光了啊==!想法参考这位同志,感谢。题意:开始的数字是1,每次1变为01,0变为10,问经过n步后,有多少对连续的0,即多少对00.分析:打表很容易发现规律。再用java的高精度(大数)得到结果就行了。设ans[i]是变换i次后的结果,由以下打表程序运行前面的较小的数(这里是前10个数)不难发现,当i为

2015-01-10 21:46:00 571

原创 POJ 2800 : Joseph\'s Problem (须仔细分析)

(寒假马拉松第一场 K题)在题目中有三种情况:1、1;2、k == n ;3、k>n;对于第一种情况我们可以分为1到k和k到n两个子问题来解。1.1、1到k:     for( i = 1 , sum = 0 ; i 1.2、k到n: sum =(n-k)*k;而对于第二种情况就是第一种情况的(1)。但是就这样写的话时明显的tle的。对于第二种情况也可以分为几个小问题来求解:2.1、1到k/2:

2015-01-10 21:45:56 542

原创 POJ 1419 : Graph Coloring - 最大团(裸)

最大团算法以后补充啊!这个可以用DFS过的。如下。#include#include#includeusing namespace std;const int maxn=110;int map[maxn][maxn],color[maxn],ans[maxn];int n,m,maxsum,len;void dfs(int u){ int i; if(u>n){ if(len>maxsum){

2015-01-10 21:45:51 483

空空如也

空空如也

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

TA关注的人

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