算法
zealotll
爱游戏,爱编程,爱IT技术
展开
-
pku 2282 The Counting Problem
题目意思:求a到b之间[0..9]这十个数字出现的次数 递归解法 #include int getbit(int num){ int i; for(i = 1; num/i > 9; i *= 10); return i;}int fn(int num, int n) // 算num有多少个 n{ int bit = getbit(num)原创 2010-04-12 20:53:00 · 666 阅读 · 0 评论 -
fzu 1810 Chinese Rings
<br /> <br />什么都不说了,矩阵乘法加速dp<br />f(i) = f(i-1) + 2*f(i-2) + 1<br /> <br /> <br />// time: 2011年4月10日14:08:21 // prog: fzu 1810 // algorithm: dp,矩阵乘法 #include <cstdio>#define MAX_SIZE 3#define MOD 200907using namespace std;class CMatrix{原创 2011-04-10 15:37:00 · 459 阅读 · 0 评论 -
zoj 1087 Cracking the Code
题目意思:你被恐怖分子绑架了,他们要求你帮他们破解密文你知道的信息是,密文是通过一个固定长度的密钥通过抑或运算加密而来,假如e为原文,u为密文,k为密钥,加密规则如下e[i] = u[i] XOR k[i MOD l]由于抑或运算的特性,所以解密规则如下u[i] = e[i] XOR k[i MOD l]恐怖分子给你4段密文,每段用不同密钥加密的,长度为30000字,你的工作是还原这4段密文的原文。最后,恐怖分子告诉你一个关键的信息: The decrypted message will be in Eng原创 2011-02-27 14:18:00 · 1220 阅读 · 1 评论 -
骑士巡游 马踏棋盘
<br />其实马踏棋盘的问题很早就有人提出,且早在1823年,J.C.Warnsdorff就提出了一个有名的算法。在每个结点对其子结点进行选取时,优先选择‘出口’最小的进行搜索,‘出口’的意思是在这些子结点中它们的可行子结点的个数,也就是‘孙子’结点越少的越优先跳,为什么要这样选取,这是一种局部调整最优的做法,如果优先选择出口多的子结点,那出口少的子结点就会越来越多,很可能出现‘死’结点(顾名思义就是没有出口又没有跳过的结点),这样对下面的搜索纯粹是徒劳,这样会浪费很多无用的时间,反过来如果每次都优先选择原创 2010-11-16 22:27:00 · 870 阅读 · 0 评论 -
Pku 3368 Frequent Values
<br />#include <cstdio>#define NN 100001#define MAXN NN*3#define lc(x) ((x)<<1)#define rc(x) ((x)<<1|1)#define getmid(a,b) ((a)+(b))>>1#define max(a,b) ((a)>(b)?(a):(b))struct point { int s,e; // 点的起始坐标跟末尾坐标 int cnt; // 点的数跟那个数出现的次数}原创 2010-09-28 22:07:00 · 479 阅读 · 0 评论 -
hdu 1698 Just a Hook
线段树#include #include #define MN 100000#define MAXN MN*3struct Segtree{public: // 运行同时初始化 void setsize(int size){ msize = size; ini(1, size, 1, 1); } void update(int s, int t, int ind, int color) { if (s==ml[ind] && t==mr[ind]原创 2010-09-25 18:14:00 · 382 阅读 · 0 评论 -
pku 3159 Candies
狗题~~做到我快抓狂,很明显一道差分约束题因为没写过bellman,所以刚开始的时候用bellman写,超时。。理解后来用spfa+queue ~~~还是超时了后来看了discuss~~才知道别人用spfa+queue都是超时的,然后用spfa+stack才不超时。然后我改成spfa+stack,一交,,,还是超时~~郁闷~~后来再详细看看discuss,估计数据是加强过,以前可以过的现在未必可以过然后有人提出跟高效一点的办法,,,dijkstra+优先级队列,,,看到别人写了ac了, 自己也写stl写一个原创 2010-09-06 19:14:00 · 497 阅读 · 0 评论 -
pku 1470 Closest Common Ancestors
<br /> lca问题<br />看了黑书指导的伪码写的<br /> <br />LCA(u) { Make-Set(u) ancestor[Find-Set(u)]=u ① 对于u的每一个孩子v { LCA(v) Union(u) ancestor[Find-Set(u)]=u // 上面①已经确定了u的祖先,不明白这里有什么用的原创 2010-09-05 14:44:00 · 672 阅读 · 2 评论 -
zoj1505 Solitaire - 双向广搜
<br />这是自己自己第一次些双向广搜,参考了杨教主的思路以后,然后在杨教主的光环庇护下,终于写出了双向广搜,思路跟教主的所以一样,但是用到了c++的stl,这里装载一下教主的解说<br />2007-07-26 03:40:42 Accepted 1505 C++ 00:00.63 1648K Tiaotiao <br />现在是凌晨3点45分.这次的胜利实在是来之不易,在我即将崩溃之时,眼前突然一片光明~AC! 真是所谓柳暗花明峰回路转喜从天降心旷神怡雪中送炭啊...:) 下面转入正题,这次解决的原创 2010-09-02 12:07:00 · 2263 阅读 · 1 评论 -
pku 3304 Segments
网上很多人给出了解题思路的了,自己也是根据大牛们的思路做了,小弟很少做计算几何的问题,因为这道题涉及到比较严格的精度控制的问题,所以记录一下以备自己以后复习查看。。思路(都是转载别人的):首先题中的要求等价于:存在一条直线l和所有的线段都相交。证明:若存在一条直线l和所有线段相交,作一条直线m和l垂直,则m就是题中要求的直线,所有线段投影的一个公共点即为垂足。(l和每条线段的交点沿l投影到m上的垂足处)反过来,若存在m,所有线段在m上的投影有公共点,则过这点垂直于m作直线l,l一定和所有线段相交。然后证存在原创 2010-09-10 15:22:00 · 475 阅读 · 0 评论 -
Sorting A Three-Valued Sequence
Sorting a Three-Valued Sequence IOI'96 - Day 2Sorting is one of the most frequently performed computational tasks. Consider the special sorting problem in which the records to be sorted have at most three different key values. This happens for instance whe翻译 2010-08-11 01:15:00 · 710 阅读 · 0 评论 -
pku 1166 The Clocks
<br />在最优解中,每种转法最多只能转3次,因为当一种转法转到第4次时针就恢复了原来的样子,相当于没转;时针最多只有4^9个状态,之前是用bfs做的,但是这样要开很大的空间记录路径,后来看了网上牛人们的分析,其实完全可以暴力枚举来做的;<br /> <br />ps:请未满18岁的同学在父母的指导下观看此代码(哈哈,代码很暴力)<br /> <br />#include <cstdio>#include <string>#include <vector>using namespace std原创 2010-08-06 20:03:00 · 700 阅读 · 1 评论 -
pku 2704 Pascal's Travels
简单dp#include #include using namespace std;int main (){ int step[35][35]; __int64 list[35][35]; char input[35]; int n; while(cin >> n && n != -1) { me原创 2010-05-26 15:24:00 · 370 阅读 · 0 评论 -
pku 2513 Colored Sticks
题目意思:给出若干两端染色的木棍,两根木棍相同颜色的一端可以连在一起,问所有木棍能否连成一条解题思路:网上普遍的解法:字典树+并查集+欧拉通路 每输入一种颜色都让它插入到树中,并给每种颜色编号--第一个出现的颜色编号为1,第二个为2………每次输入一根木棍都将该木棍的两种颜色合并。输入完后查看是否所有的颜色的代表都一样,而且奇度点是否只出现0(欧拉回路)次或者2次。 代码原创 2010-04-22 16:10:00 · 432 阅读 · 0 评论 -
1204 Word Puzzles
<br />初学ac自动机,拿别人的代码作别模板修改的。<br />之前用query()查询的时候,查询到一个合适解就返回了,wa了n次,自己竟然犯这么低级错误,太不应该了 <br />这次看了别人的代码后受益良多,以此记载一下<br />#include<iostream>#include <stdio.h>#include <string.h>using namespace std;#define TXTL 1005//子树节点是在插入时new的,//寻找失配指针中使用的队列原创 2011-04-19 16:36:00 · 578 阅读 · 0 评论