◆点点滴滴
文章平均质量分 88
nyist_xiaod
这个作者很懒,什么都没留下…
展开
-
NYOJ 284 坦克大战(BFS)
题目链接:Click here~~好累啊,写篇博客歇歇。题目背景很有趣,是大家小时候经常玩的坦克大战,哈哈。弱弱地表示本人小时候经常玩游戏机。此题是在迷宫问题的基础上做了些改动,就是地图上能走的点可能耗费时间1,也可能耗费时间2。那么,元素在出队列时,不能简单的按照以前的入队顺序出队了,而应该让时间最短的先出队,这样就能够保证先入队的点一定是时间最短的,那么搜到终点时也时间原创 2012-03-07 21:03:58 · 1172 阅读 · 1 评论 -
NYOJ 82 迷宫寻宝(一)(BFS)
题目链接:Click here~~又是一道迷宫问题。这次,地图中多了门和钥匙这两个元素。所以,我们只要考虑如何处理这两个新增的东西就好了。首先,在输入数据时,对于钥匙,我们可以用一个数组lock[]保存要打开这扇门需要几把钥匙,当我们遇到钥匙,就给对应的lock[]加一。而对于门,因为必须找齐钥匙才可以开,所以当我们遇到门的时候,可以先把它存到一个栈里(每个门各自对应一个栈)。原创 2012-03-07 21:29:37 · 1193 阅读 · 0 评论 -
HDU 1042 N!(模拟)
题目链接:Click here~~#include #include #define base 10000 //1万代表每位存4位./*想想当N变大时,考虑中间数据是否会溢出int(即base*N) */int num[10000];//此处位数根据N的阶乘位数/base的位数变化而变化int main(){ int n; while(~scanf("%d",&n原创 2012-01-12 22:37:26 · 917 阅读 · 2 评论 -
HDU 1002 A + B Problem II(模拟)
题目链接:Click here~~今天无聊,把A + B Problem II用字符串做了一遍。感觉挺有成就感的,所以记录下来吧。#include #include #define M 1005//#include //#define creat (char *)malloc(sizeof(char))int main(){ //char *a,*b,*f;原创 2012-01-12 21:39:55 · 633 阅读 · 0 评论 -
NYOJ 228 士兵杀敌五(插线问线__离线版)
题目链接:Click here~~观察这道题你会发现它的特点:查询操作全部在插完后进行,也就是传说中的离线问题。这道题有种巧妙的O(n)的做法。其思想和树状数组的插线思想类似。#include #define base 10003const int M = 1000003;int c[M];int main(){ int n,m,Q,a,b,x;原创 2012-04-25 09:28:43 · 1351 阅读 · 3 评论 -
HDU 1271 整数对
题目链接:Click here~~题意:给你一个数n,找到另外一个数x,使得x加上x'等于n,其中,x'为x删去某一位(如第k位,假设最低位为第0位)上的数字后余下数字组成的数。解题思路:对于任意一个数字x,在此题环境下,我们都可以把它分解成3部分,k位左边部分,k位部分,k位右边部分。为了方便起见,我们把这三部分所对应的数字分别记为a,b,c。则我们可以把x表示成原创 2012-05-04 10:04:42 · 916 阅读 · 0 评论 -
Sexagenary Cycle(干支纪年)
给你一个年份,用干支纪年表示。干支纪年需要注意的有以下几点:1、公元后第一个甲子年是公元4年。2、干支纪年以60年为一循环。3、公元纪年的起点是从公元1年开始,也就是说,没有公元0年。4、对于公元前的年份可以转化成公元后的年份,由于没有公元0年,所以要先给公元前年份加1,然后加60的整数倍变成公元后的年份。#include int main(){ int z原创 2012-04-08 17:34:47 · 1621 阅读 · 0 评论 -
HDU 1045 Fire Net(DFS)
题目链接:Click here~~和这届蓝桥杯的一道代码填空题很相似。题意:在一个方格中,放置尽量多的大炮,大炮如果在同行或同列,中间必须有墙相隔。解题思路:深搜不解释。#include char map[5][5];int n,ans;bool leagal(int x,int y){ bool have; have = false; map[x][原创 2012-05-21 10:39:05 · 857 阅读 · 0 评论 -
NYOJ 413 && POJ 1019 Number Sequence(模拟)
题目链接:Click here~~很早以前就看懂的一道题,当时不会做,今天在poj看到了, 有点思路,就写了。题意:有一个很长的串(称为大串),它由若干个小串相连,且小串i为它之前小串i-1加数字i组成,问此大串中第n位是哪个数字。解题思路:我们观察小串的规则可以看出,串i的长度等于串i-1的长度加上数字i的长度,而数字i的长度很容易求出来,所以我们可以由递推求出每个串原创 2012-05-10 11:27:23 · 855 阅读 · 0 评论 -
NYOJ 364 & HDU 1052 田忌赛马(贪心)
题目链接:Click here~~好厉害的题,难度为1,纠结1天。在搜完无数大牛博客后,终于有些略懂了。是用贪心做的, 这也应该是公认的解法吧。题意:田忌和齐王各有N匹马,判断怎样比赛,使田忌净胜场数最多。我感觉这题的精髓就是,不管怎么比赛,都要让田忌的马发挥最大价值。当然,马的第一要务是用来赢得比赛,而且要最大效益的赢,也就是要赢对方仅次于自己的马。当原创 2012-03-20 07:40:45 · 4643 阅读 · 3 评论 -
HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
题目链接:Click here~~前几天学的单调队列,然后找题目练习,看这道题两天了,终于想通了。题意:给你一个循环序列{An},让你找出长度不大于K的连续子序列,使这个子序列和最大。解题思路:由于子序列连续,所以和上道题目一样,它的和可以通过两个前缀和作差得到。(即sum[i~j]=sum[j]-sum[i-1](j-i+1而对于同一个序列终点来说,起点左边那个元原创 2012-04-10 09:25:58 · 1279 阅读 · 0 评论 -
NYOJ 30 Gone Fishing(枚举+贪心)
题目链接:Click here~~题意:一个人去钓鱼,在一条单向路上的旁边有n个湖,并且从湖i到湖i+1需要ti的时间,每个湖里面有fi条鱼,每钓一次鱼,鱼会减少di条。在给定时间T内,问如何才能使钓的鱼最多,并记录在各个湖上停留的时间。解题思路:由于走路也需要耗费时间,所以为了争取更多的时间钓鱼,那个人肯定不会走回头路,即每条路花费的时间最多记1次,且剩下的时间即为钓原创 2012-05-06 19:31:59 · 846 阅读 · 0 评论 -
NYOJ 513 & HDU 1753 A+B Problem IV(模拟)
题目链接:Click here~~一道高精度加法的题目。由于数据中可能既有小数又有整数,所以我把整数变成小数(后面加".0"),从而化为两个小数相加的问题。找小数点的时候,先判断它是否有末尾0,把末尾0先消去(最少保留一个)。然后把小数点对齐,按照A+B(二)的做法先把数组倒置,然后对应位相加。 #include #include #define max(a,原创 2012-04-02 10:29:44 · 1237 阅读 · 2 评论 -
NYOJ 520 & HDU 2136 Largest prime factor(筛法思想)
题目链接:Click here~~题意是求出某个数n的最大素因子是第几个素数。原以为是水题,没想到低估它了。开始时我先把100W内的素数打表,然后用欧拉函数的做法,对每个数挨个分解质因子,得到最大的素因子,输出它的下标。结果,悲剧的TLE了。后来小冰告诉我,可以用筛法的思想做,我顿悟了。做法如下:表中不在记录素数的值,而是直接记录素数的序数。从2开始循环,当遇到原创 2012-04-09 14:13:33 · 743 阅读 · 0 评论 -
HDU 2095 Find your present (2) (位异或)
题目链接:Click here~~题意:给你n个数字,已知只有一个数字出现了奇数次,其他数字都出现了偶数次,要求你找出这个特别的数字。解题思路:题目内存限制:1024K,所以不能简单地用数组存然后再处理。为了节约内存,可以用STL里面的set,map等容器。当容器里没有这个元素的时候,就插入这个元素,否则,删除这个元素。最后,容器中肯定只剩下一个元素,便是我们所原创 2012-04-12 22:27:05 · 5022 阅读 · 1 评论 -
HDU 1517 A Multiplication Game(博弈入门)
题目链接:Click here~~这两天看了下博弈,整理下思路吧。先引入必胜点和必败点两个概念:必败点(P点) :前一个选手(Previous player)将取胜的位置称为必败点。必胜点(N点) :下一个选手(Next player)将取胜的位置称为必胜点。对于这两个概念的描述,我开始的时候也搞不懂。其实可以从字面理解,简单说来,就是当你走到某一原创 2012-04-19 13:33:01 · 3127 阅读 · 0 评论 -
ZOJ 3516 Tree of Three(DFS)
题目链接:Click here~~题意:给一棵树,有n个节点(编号:0~n-1),每个节点有一个权值,0为树根,找出某个节点所在子树的最大的3个值。解题思路:树根已经确定,所以问题也变的比较简单,只需要先确定叶子节点的最值,依次向父节点传递影响,直到根节点。则很容易想到用深搜来实现。#include #include #include #include #defin原创 2012-05-10 21:28:58 · 980 阅读 · 0 评论 -
UESTC 1651 Fill Numbers(模拟)
题目链接:Click here~~题意:给n*m的矩阵,里面大部分写着数字,部分数字未给出,用-1表示,且每行每列未给出的数字不超过2个。然后给你每行需要满足的和与每列需要满足的和。让你判断是否存在方案满足条件,如果满足,是否有多种。解题思路:先把每行(列)空1个的格子填好,填好后,判断其对应的列(行)是否出现矛盾。如果不矛盾,继续填。当没有空1个格子的时候,就不用原创 2012-05-06 13:02:58 · 708 阅读 · 0 评论 -
HDU 1028 Ignatius and the Princess III(母函数)
题目链接:Click here~~母函数第二题,整数划分。#include #include const int MAX=120;int main(){ int n,c1[MAX+5],c2[MAX+5]; while(~scanf("%d",&n)) { memset(c1,0,sizeof(c1)); mems原创 2012-03-23 11:27:43 · 1471 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese(记忆搜索)
题目链接:Click here~~题意:在n*n的格子上,每个点各有若干块奶酪,胖老鼠从左上角出发,每次最多走k步(只能直走),且下一点必须比这一点的奶酪多,问最多能吃到多少块奶酪。以前做过一道记忆搜索的题,叫skiing。好久不写深搜,犯了个很2的错误,把mmax声明成全局的了,WA了n次,rbl。#include #include #include us原创 2012-07-04 10:51:43 · 1950 阅读 · 0 评论 -
HDU 1088 Write a simple HTML Browser
题目链接:Click here~~继续水字符串处理。PE了好几次,没有考虑 '\t' 的情况。题意:将一段HTML代码格式按要求调整。解题思路:用一个pos记录当前行已经输入了几个字符,然后如果位于行首,单词前不用输空格,否则输空格。还有就是一些小细节处理,比如最后要输出一个换行,其他不再详述,见代码。#include int pos,l;void BR(){原创 2012-05-20 20:15:50 · 776 阅读 · 0 评论 -
HDU 2082 找单词(母函数)
题目链接:Click here~~母函数第一题。大概能看懂了。#include #include const int MAX=50;int c1[MAX+5],c2[MAX+5],num[27];int main(){ int T; scanf("%d",&T); while(T--) { memset(c1,0,siz原创 2012-03-23 11:08:03 · 2395 阅读 · 0 评论 -
NYOJ 503 & HDU 2199 解方程(二分)
题目链接:Click here~~二分查找。注意精度。#include #include double f(double x){ return 8*pow(x,4) - 7*pow(x,3) + 2*pow(x,2) + 3*x + 6;}double Binary_Find(double left,double right,double y){ w原创 2012-03-24 13:37:00 · 845 阅读 · 0 评论 -
HDU 1501 Zipper(DFS)
题目链接:Click here~~题意:给你a、b两个串,问是否可以不改变它原来的顺序,插入形成c串。解题思路:以c串为准,从前向后搜,注意标记搜索过的状态即可。#include #include char a[205],b[205],c[405];bool vis[205][205];bool yes;void dfs(int loc_a,int loc原创 2012-05-07 10:08:53 · 998 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone(DFS)
题目链接:Click here~~今天下午做了这道深搜题,弄了半天,终于对深搜有了初步的认识。题目大意就是给你一个迷宫,要你判断有没有一条路径,可以在时间t时恰好到达终点。搜索的魅力,无疑在于剪枝。对于这道题,可以有4种剪枝。1.如果当前搜索的深度(时间)大于时间t,中止搜索。2.如果已经搜索到结果,中止搜索。3.如果当前所剩余的时间小于从当前位置到终点的理论最短时原创 2012-03-11 21:40:49 · 877 阅读 · 0 评论 -
NBUT 1189 Join the Lyrics Player(字符串处理)
题目链接:Click here~~题意:给你一个lrc歌词文件,文件中,每行前面是若干个时间标签,当当前时间大于等于此标签且小于其他时间标签时,输出此行歌词。然后给你一个时间,输出这个时间应该输出的歌词。解题思路:从这个时间向前找,直到找到某个时间在标签中出现过,然后输出所在标签的歌词。由于时间格式特点,我们可以用一个int型变量储存它的状态i。原创 2012-07-06 18:55:50 · 794 阅读 · 0 评论 -
NYOJ 325 zb的生日(搜索解平分问题)
题目链接:Click here~~题意:有n个西瓜(n解题思路:还是看成容量为 sum/2 的背包问题,用搜索枚举所有情况,使背包中的重量尽量大。如此可得到最优解。搜索的效率取决于剪枝。而剪枝一般有两种,可行性剪枝与最优性剪枝。可行性:如果将物品装入背包后,费用超过容量,则不将它放入背包。最优性:1、如果背包已经装原创 2012-07-06 08:39:30 · 2252 阅读 · 2 评论 -
HDU 2159 FATE(二维完全背包)
题目链接:Click here~~题意:中文题不解释。解题思路:有三个变量,我们需要考虑下哪两个看做费用,哪个看做价值。习惯起见,我们把经验看做价值(因为他是状态转移时会增加的量)。状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-b[k]]+a[k]). ( i 表示杀敌数, j 表示忍耐度, a 表示增加的经验原创 2012-07-09 18:31:51 · 685 阅读 · 1 评论 -
HDU 2546 饭卡(01背包小变形)
题目链接:Click here~~题意:中文题不解释。解题思路:由于最后5元钱可以买任何价值的物品,所以为了使余额最少,我们应该用这5元钱买最贵的物品。于是问题转化成了容量为V-5,除去一个最贵物品的01背包问题。#include #include #define N 1005#define max(a,b) a > b ? a : bi原创 2012-07-10 08:24:13 · 781 阅读 · 0 评论 -
HDU 3496 Watch The Movie(二维01背包)
题目链接:Click here~~题意:有n个电影,每个电影有时间c和价值w两种属性,从中选m个,且必须是m个,使时间不超过T且价值最大。解题思路:挺裸的二维01背包,只是有一维要装满,标记下即可。状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-c]+w).( i 表示电影个数, j 表示时间)初始时将dp[0][j原创 2012-07-09 19:29:12 · 616 阅读 · 0 评论 -
HDU 1712 ACboy needs your help(分组背包)
题目链接:Click here~~题意:有n门课,最多学习M天。A[i][j]表示学习第 i 门课 j 天得到的价值。求如何使价值最大。解题思路:最裸分组背包。把每一天看做一组,每组中还有M件物品,只能不选或者选择其中一个物品。然后依次对每组进行01背包。一定要注意在dp时的三层循环的顺序。for(V->0)这层循环必须在for(所有属于原创 2012-07-10 10:39:37 · 619 阅读 · 0 评论 -
HDU 1003 Max Sum(最大连续子序列和)
题目链接:Click here~~题意:RT。解题思路:比较简单的dp,很容易推出状态转移方程:sum[i] = max{sum[i-1]+a[i],a[i]}. (sum[i]记录以a[i]为子序列末端的最大连续和.)然后用一个值记录更新sum[i]的最大值即可。即对于a[i]这个数字,我们考虑是否将它选入之前连续的序列。如果选,状态变原创 2012-07-11 18:28:59 · 8306 阅读 · 0 评论 -
HDU 2870 Largest Submatrix(最大完全子矩阵之不可移动列)
题目链接:Click here~~题意:和HDU 2830类似,只是这次不能再将列任意移动,于是题目完全变成了求最大长方形那道题。解题思路:只说如何求最大长方形,我的思路是枚举每个高度,然后以它做基准,向左向右扩张,扩张条件是h[i-k]>=h[k]、h[i+k]>=h[k]。记录扩张的个数即可。没想到这题竟然进rank了,好高兴。话说我都没用传说中的单原创 2012-07-12 08:28:27 · 1377 阅读 · 0 评论 -
HDU 2830 Matrix Swapping II(最大完全子矩阵之可移动列)
题目链接:Click here~~题意:给你一个矩阵,里面的数字只有0和1两种,其中,列可以任意移动。问如何移动可以使某个子矩阵中元素全部是1,求出这个最大子矩阵的面积。解题思路:枚举所有的尾行,然后对于每个尾行,记录到这行为止每列连续的1的个数,为了形象起见,我们可以把每列看做宽度为1,连续个数看做它的高度。然后问题就可以看做在一些高度可能为0的相邻矩原创 2012-07-12 08:18:43 · 1906 阅读 · 2 评论 -
HDU 3548 Enumerate the Triangles(找周长最小的三角形)
题目链接:Click here~~题意:平面上有n(n解题思路:如果直接枚举的话,是O(n^3)肯定会超时,所以要优化。首先我们考虑,周长c=L1+L2+L3,所以推得c > 2Li,假设Li的端点为点a、b,则又有Li>=| Xa-Xb |,故c > 2*| Xa-Xb |。可以先按照X坐标从小到大排序,然后当已得到的最小值ans #i原创 2012-07-15 09:24:30 · 2205 阅读 · 0 评论 -
NYOJ 79 & 17 & 214 单调最长子序列问题(DP)
先解释下什么叫子序列。若a序列删去其中若干个元素后与b序列完全相同,则称b是a的子序列。我们假定存在一个单调序列{An}(以递增序列为例),现在在其后面添加一个元素a(n+1),有两种情况:1.a(n+1)>a(n) 。此时,a(n+1)可以添加到An序列的尾部,形成一个新的单调序列,并且此序列长度大于之前An的长度;2.a(n+1)经过分析,我们可以得出这样的结论:一个单调序原创 2012-03-03 16:48:19 · 1056 阅读 · 1 评论 -
HDU 4339 Query(树状数组+二分)
题目链接:Click here~~题意:有s1、s2两个串,有两种操作:1、查询从i位置开始,两串中最多有多少个字符相等。2、将某串的i位置的字符变为其他字符。解题思路:用一棵树状数组记录两串中前 i 个位置共有多少个字符对应相等。若某段区间[i,j]中,字符全部对应相等,则必有sum(j)-sum(i-1) = j-i+1 。设字符串长度为n,原创 2012-08-04 19:46:17 · 675 阅读 · 0 评论 -
HDU 3552 I can do it!(贪心)
题目链接:Click here~~前两天比赛时候的最水的一道题,当时思路很乱,没有做出来,各种弱。题意:有n个物品,每个物品有两种属性X和Y。问怎样把这些物品分成两个集合(可空),使得【集合A中的max(X)+集合B中的max(Y)】的值最小。解题思路:当一个集合中所需最大值确定的时候,小于等于这个值的都应该放进来,肯定不会使结果更差。这里用到了贪心。原创 2012-07-15 08:55:39 · 1500 阅读 · 0 评论 -
HDU 2647 Reward(拓扑排序)
题目链接:Click here~~题意:老板给员工发薪水,有的员工要求必须比某些员工薪水高。基础薪水是888,问最少发多少薪水。解题思路:想要发的薪水最少,就要让员工尽量只满足要求即可,不必多发。我们可以大致想象出员工的薪水大概是一层一层分布的,即888一层,889一层,依此类推,每层有若干个员工,但一定不会为0。(想想为什么)接下来,我们将员工原创 2012-07-21 16:23:44 · 1218 阅读 · 3 评论 -
HDU 1877 又一版 A+B(进制转换)
题目链接:Click here~~主要看下如何用递归实现十进制向m进制转换。#include int m;void Ck(int n){ if(n>=m) Ck(n/m); printf("%d",n%m);}int main(){ int A,B; unsigned int C; while(scanf("%d",&m),m) { scanf(原创 2012-05-22 08:42:17 · 1450 阅读 · 0 评论