- 博客(56)
- 资源 (2)
- 收藏
- 关注
原创 AC自动机总结
AC自动机总结0.引言: 由于大连现场赛的一道 AC自动机+ DP的题目(zoj3545 Rescue the Rabbit)被小媛同学推荐看 AC自动机。经过一段时间的努力,终于把 shǎ崽神牛的 AC自动机专辑题目 AK(其实还差那个高中题。。囧。。不让做)。 特别感谢:shǎ崽神牛,并附以链接: http://www.notonlys
2014-03-30 02:18:19 27088 12
原创 UVa 10905 - Children's Game
题目:给你一些数字,让你将他们组成一个最大的数字。分析:简单题。直接按字符串排序即可。前缀大于整串。#include #include #include #include #include using namespace std;string number[51];int cmp( string a, string b ){ return a+b > b+a;}
2014-03-31 02:47:02 1345
原创 UVa 10579 - Fibonacci Numbers
题目:计算Fib数列的第k个数。分析:模拟,大整数运算。大整数加法,直接模拟即可,因为不超过1000位,所以算到Fib(5000) 1000 #include #include #include #include using namespace std;int F[5005][2000];int m
2014-03-28 12:30:01 1705
原创 APOC-UVA-0001 题解
PA(UVa709) :区间dp。状态转移方程:F(i,j)= min(F(i,k-1)+min_line(k,j)), i 其中,min_line(k,j)是以k开始,j结
2014-03-27 23:20:22 839
原创 UVa 243 - Theseus and the Minotaur (II)
题目:忒修斯和牛头人,这是个很有名的古希腊神话故事。题目的描述也不是一般的长啊。 估计很多人是被英文吓跑了,╮(╯▽╰)╭为了干掉他,看了3天的题目。 题目大概的意思:这有一个迷宫,由山洞和隧道组成,T(忒修斯)和M(牛头人)开始时 处于迷宫的隧道中,然后向前走。T的运动规则是,进入到一个洞穴后,就靠着右侧的强走,
2014-03-27 22:43:08 1631
原创 UVa 10954 - Add All
题目:将一些数字加和,每次加和的代价是两数之和,求合并所有数的最小代价。分析:贪心。哈夫曼树,因为合并时总的计算次数是一定的,所以小的数字计算多次, 即为总代价最小,所以每次计算最小的两个数字之和即可。#include #include #include #include #include using namespace std;//banery_
2014-03-27 04:04:48 626
原创 UVa 858 - Berry Picking
题目:给你一个平面的多边形,再给你一条平行于y轴的直线,问直线被多边形截取的总长是否超过目标。分析:计算几何。 方法一:1.求出所有直线和多边形交点。(O(N)) 2.对交点按纵坐标排序,则排序后这些点一定相邻。(O(NlgN)) 3.判断每对相邻点间的
2014-03-26 16:02:43 1295
原创 UVa 11968 - In The Airport
题目:在机场买东西,有饮料和蛋糕,问最接近所有物品平均价格的饮料和蛋糕的价钱。分析:简单题。直接平均值,比较即可,防止精度误差,都乘以物品总数。注意:要用long long类型,防止数据溢出。#include #include #include using namespace std;int m[1001];int k[1001];int n[1001];long
2014-03-26 15:24:38 752
原创 UVa 11935 - Through the Desert
题目:你有一辆车,有一串车的运动序列,问车最少的油箱是多大,才能完成这个指令序列。 Fuel consumption n:n/100 km 耗油 Leak:漏洞增加一个,每个洞 1/1 km 耗油 Gas station:加满油 Mechanic:修好所有的漏洞 Goa
2014-03-26 15:19:39 1194
原创 UVa 709 - Formatting Text
题目:给你一段文字,让你对文字排版,每行的最大长度有限制L,有一个对于排版格式的权值公式: P = sum((单词间空格-1)*(单词间空格-1)) 求出P最小的一种排版,F相同时输出前面的空格最少的。分析:DP。看见题目第一想到的就是利用dp,设F(i,j)是从第i个单词开始排版,到第j个单词结束的最小P
2014-03-26 14:59:16 1890
原创 APOC-UVA virtual judge 开启
我和LG童鞋商量了一下,为了起到锻炼思维的目的,以后采用从UVa中随机题目刷题的方式。在virtual judge上开启 APOC-UVA比赛,每次以3天左右为一个周期,在UVa上随机5道题目。比赛模式设置为public,有意者可以过来参加( ⊙ o ⊙ )啊!
2014-03-26 14:38:47 1507
原创 UVa 10130 - SuperSale
题目:有一个超市大甩卖,但是每个人同样的商品只能拿一件,商品有价值和重量,现在有一个顾客序列, 每个人能拿的最大重量已知,求这些顾客,能拿到的最大价值的物品和。分析:dp,01背包。看题目显然是01背包,每个物品只能取一种,每个顾客其实是一个单独的01背包过程,求和即可。注意:dp的初始化,和数据的清空。#include #include #include
2014-03-24 14:33:15 1095
原创 UVa 489 - Hangman Judge
题目:猜单词游戏,如果猜的字母是答案中的就会显示,否则就算猜错,同一字母猜错,不增加错误次数,猜错不能达到7次。分析:模拟。按照题目要求模拟即可。设置一个状态函数state()可简化操作, 如果对应字母存在则返回1,不存在返回0,如果存在并被猜出来返回-1,不存在被猜错返回-2。#include #include #include using namesp
2014-03-24 14:16:37 1254
原创 UVa 11530 - SMS Typing
题目:给你手机键盘,问你打出一句话需要按键次数,例如b是按2次,c是3次。分析:模拟。打表记录每个按键次数下的字母,在用它反打表计算,每个字母的按键次数。#include #include #include using namespace std;string str;char mapc[5][10] = {""," adgjmptw","behknqux","cfilor
2014-03-24 13:42:47 984
原创 UVa 694 - The Collatz Sequence
题目:还是经典的3n+1问题,这次给了一个计算过程中间值的上界,超过直接停止。分析:模拟。直接模拟即可。注意:中间计算用long long防止溢出。#include #include #include using namespace std;int X( long long n, long long l ){ if ( n == 1LL ) return 3; int
2014-03-24 13:04:15 1240
原创 UVa 371 - Ackermann Functions
题目:3n+1经典问题,求区间中最大运算次数。分析:直接在区间中计算,取最值即可。注意:1.区间的端点可能是反的;2.计算过程中用long long防止溢出。#include #include #include using namespace std;int X( long long n ){ if ( n == 1LL ) return 3; int count =
2014-03-24 13:01:13 1703
原创 UVa 499 - What's The Frequency, Kenneth?
题目:统计每行出现的次数最多的字母,按ASC顺序输出。分析:简单题。利用奇数排序统计即可。#include #include #include using namespace std;string str;int Count[128];int main(){ while ( getline( cin, str ) ) { for ( int i = 0 ; i
2014-03-24 11:08:04 961
原创 UVa 264 - Count on Cantor
题目:求分数序列 1/1 1/2 2/1 3/1 2/2 1/3 ...的第N个数。分析:简单题。打表计算出10000000以内的所有结果,查询输出。 打表利用模拟方法计算,设置一个方向变量flag,则满足如下地推关系: 设 F(i-1) = n/m,则 F(i) = n/(m+1) flag = -flag { n == 1 , f
2014-03-24 10:53:57 1409
原创 近期安排
近期应该忙于准备材料、成绩单和证明。语言学习的报名也要抓紧了。除了准备考核的专业课外,还准备重新看看微积分,基本忘光了o(╯□╰)o读书计划:knuth、计算几何导论、深入了解计算机系统、心理学与生活、一本计算机语言的综合书。前两本看着略纠结( ⊙ o ⊙ )啊!加油↖(^ω^)↗。决定将以前在百度空间的文章转移过来(以dp和字符串处理为主)复习以前学过的算法和DS。
2014-03-24 02:55:11 1050 2
原创 hash表模板
/* 自己的hash函数模板 zoj3013 hash映射: T = 200 zoj3013 字典树: T = 80*/#include #include #include #define min( a, b ) ((a)<(b)?(a):(b))/* Hash define */#define words
2014-03-24 02:42:08 1101
原创 字典树模板
/* 自己写的字典树模板 zoj1109:140ms 有待改进 */#include #include #include /* Trie define */#define nodesize 200010#define wordsize 100010#define lettsize 11typedef struct node{ char* word;
2014-03-24 02:40:35 1044
原创 一元三次方程的分治解法
/* 2011-09-21 f(x)=ax^3+bx^2+cx+d 分析:设三个根为 x0,x1,x2 有 f(x)=a(x-x0)(x-x1)(x-x2)有(韦达定理) -b = a(x0+x1+x2) c = a(x0x1+x1x2+x2x3) -d = ax0x1x2
2014-03-24 02:25:00 3317
原创 求解一元方程公式法
最近决定将以前在百度空间的文章转移过来(以dp和字符串处理为主)/* 只有1,2,3,4次方程有求跟公式 */#include #define OO 10class equation { private: double A,B,C,D,E; public: double X[ 5 ]; int Count
2014-03-24 02:21:46 1021
原创 UVa 10699 - Count the factors
题目:计算一个数的素数因子个数。分析:数论。直接打表计算1000000内的素数,然后枚举取余判断即可。#include #include #include using namespace std;int visit[1000001];int prime[700001];int main(){ memset( visit, 0, sizeof(visit) ); in
2014-03-24 02:11:12 1083
原创 UVa 10307 - Killing Aliens in Borg Maze
题目:在一个迷宫中,以S为起点,遇到A时可以分叉,问走到所有的A的路径和最小代价。分析:图论,最短路,最小生成树。利用bfs求出所有的A和A以及A和S间的最短路, 再在这个最短路生成的途中计算最小生成树即可。注意:最多101个点,世界上最遥远的距离就是因为数组少开了1个而无限的WA( ⊙ o ⊙ )!#include #include #include
2014-03-24 01:38:15 1475
原创 UVa 10034 - Freckles
题目:给你平面上的n个点,求把他们连在一起的最小代价。分析:图论,最小生成树。直接计算出所有点之间的距离,然后计算最小生成树即可。注意:每组数据之间有空行。#include #include #include #include #include using namespace std;typedef struct d_node{ int point1; in
2014-03-24 00:43:16 607
原创 UVa 10168 - Summation of Four Primes
题目:判断给定的数字能否写成4个素数的和。分析:数论。1.如果N = 8 时,如果N为奇数则令N = 2 + 3 + K, N为偶数则令N = 2 + 2 + K这样K为偶数且K>=4,这时满足哥德巴赫猜想: 一个偶数可以拆成2个素数和的形式。通过循环拆解K即可。 素数判定可以利用筛法打表,或者直接按照随机判定算法判
2014-03-23 18:31:04 1118
原创 UVa 11631 - Dark roads
题目:求一个图中,形成最小生成树后剩下的边长的总和,即利用补图求kruskal求SMT删掉的边的长度和。分析:图论,最小生成树。#include #include #include #include #include #include using namespace std;typedef struct d_node{ int point1; int point2;
2014-03-22 20:24:54 804
原创 UVa 11747 - Heavy Cycle Edges
题目:计算最小生成树的kruskal算法,有两种途径,方法一是我们常用的不断的把边加到目标集合上。 方法二是从图中不断的删边,最后剩下的就是所求集合。分析:最小生成树。利用kruskal算法的方法一,求剩下的边就是删掉的边,即为所求。注意:数组别开小了,特别是并查集的。#include #include #include #include #inclu
2014-03-22 19:51:11 905
原创 UVa 10600 - ACM Contest and Blackout
题目:计算一个图的最小生成树和次小生成树。分析:图论,最小生成树。冤家题(⊙_⊙),2011年北京赛区现场赛A题类似物。 当时在赛场上想到了kruskal+bfs的加边删边算法。由于写错了一行代码最后悲剧了。 利用kruskal算法先计算出最小生成树,然后设置maxe[i][j]数组, 记录i到j在最小生成树上的路径
2014-03-22 15:34:15 1939
原创 UVa 10397 - Connect the Campus
题目:给你一些建筑,以及他们之间的一些电缆,问把他们都连起来还需要多少电缆。分析:最小生成树。将已有的电缆长度定义为0,直接进行最小生成树算法即可。#include #include #include #include #include #include using namespace std;typedef struct p_node{ int x,y;}pnod
2014-03-22 01:44:25 843
原创 UVa 10009 - All Roads Lead Where?
题目:给你一些地名,以及他们的相连关系,求两点间的最短路径,输出路径。分析:最短路。根据题意给出的图形应该是一棵树,直接利用bfs求解即可,不需要设置标记数组。 利用hash表,建立地名和地点id的一一映射,利用邻接表建图,最后运行bfs即可。注意:输出格式,每组之间有一个换行。#include #include #include #include
2014-03-21 20:30:06 1778
原创 UVa 10099 - The Tourist Guide
题目:有一个导游,要带领团队从当前点,走到目标点,但是每条路一次性通过的人有数量限制, 所以需要分批次进行。问最少需要分多少次进行。分析:贪心,最短路或最小生成树。图上贪心性质的扩散问题,可以作为最短路或者最小生成树求解。 问题的贪心特性成立很容易证明。 设集合A为当前计算的结果,则对于p∈A且q不在A中,如果点q加
2014-03-21 18:18:33 1487
原创 UVa 11624 - Fire!
题目:一个平面迷宫中有一个人,迷宫中有些点起火了,火和人每个单位时间只能向相邻的格子移动, 其中有一些空间被墙壁占据,问这个人在不背或烧到的情况下,离开迷宫的最快时间。分析:搜索。迷宫中的最短路,首先就会想到bfs;并且bfs利用队列会使状态空间按时间顺序分层。 而火的扩散过程正好符合这个时间的层次。所以我们会想到,利用两个队列,一个储存人的
2014-03-19 14:58:55 4658 3
原创 UVa 11101 - Mall Mania
题目:给你平面上的两个图形的有序点集表示,求两图形的哈密顿距离(|x|+|y|)。分析:搜索、最短路。利用bfs求解即可,可利用缩小边界优化效率,dbfs或者A*可能效率更高。注意:数据范围是0-2000,2001个点,小心RE。#include #include #include #include #include using namespace std;typede
2014-03-19 12:32:01 1195
原创 UVa 10653 - Bombs! NO they are Mines!!
题目:给你一个R*C的平面图,一个机器人在上面走,上面有一些坑,找到要求的最短路径。分析:搜索,最短路。直接利用bfs求解即可。#include #include #include #include #include using namespace std;int maps[1005][1005];int smap[1005][1005];int d[4][2] = {
2014-03-18 22:51:52 1042
原创 UVa 558 - Wormholes
题目:给你空间中的一些虫洞,可以在时间点跳跃,问是否存在负权回路。分析:最短路。判断图中是否有福泉回路,利用bellman-ford或者spfa,如果更新次数超过点的上限,既有。注意:有向图。#include #include #include #include using namespace std;int visit[1005];int dist[1005];in
2014-03-18 16:38:39 659
原创 UVa 10013 - Super long sums
题目:大整数加法。分析:简单题、模拟。利用数组计算即可。#include #include #include #include using namespace std;int A[1000005];int B[1000005];int main(){ int n,m,l; while ( scanf("%d",&n) != EOF ) while ( n --
2014-03-18 02:09:11 1105
原创 UVa 10098 - Generating Fast
题目:重集全排列,195类似物。分析:搜索。dfs+去重处理;去重:用当前前缀和上一个已知串匹配,相同即return(后面的结果一定和前面相同)。#include #include #include #include #include using namespace std;char data[11];char save[3628800][11];char temp[1
2014-03-18 01:28:53 699 3
原创 UVa 10000 - Longest Paths
题目:给出一个图和图上的边(边长为1),求最长路径,图中无回路。分析:最短路、图论。方案1,拓扑排序求关键路径; 方案2:边长取-1则变成无负权回路状态下的最短路问题。利用spfa(bellman-ford)求最短路。#include #include #include #include using namespace std;int maps[10
2014-03-18 00:30:30 2352
SOFA: A Multi-Model Framework for Interactive Physical Simulation
2018-06-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人