07 2015 档案

摘要:任意线可以贪心移动到两点上。直接枚举O(n^3),会TLE。所以采取扫描法,选基准点,然后根据极角或者两两做叉积比较进行排排序,然后扫一遍就好了。旋转的时候在O(1)时间推出下一种情况,总复杂度为O(n^2logN)就可以过了。另外,本题有个很巧妙的技巧,就是一点等效与相反坐标的相反颜色的点。第一次... 阅读全文
posted @ 2015-07-31 23:46 瑞宇 阅读(276) 评论(0) 推荐(0)
摘要:摘要:贪心,问题分解。因为行列无关,所以这个二维问题可以分解成两个一维问题。优先队列实现:类似区间点覆盖的问题,先按照左端点排序,相同然后在按右端点排序(灵活性小的优先选)。最优的选法,当然是要使选的这个点经过的区间越少越好,那么就选最左边的点,因为选右边可能多经过区间,一定不比选最左边的更优。选完... 阅读全文
posted @ 2015-07-31 17:29 瑞宇 阅读(271) 评论(0) 推荐(0)
摘要:摘要:中途相遇。对比map,快排+二分查找,Hash效率。n是4000的级别,直接O(n^4)肯定超,所以中途相遇法,O(n^2)的时间枚举其中两个的和,O(n^2)的时间枚举其他两个的和的相反数,然后O(logN)的时间查询是否存在。首先试了下map,果断TLE//TLE#include#incl... 阅读全文
posted @ 2015-07-31 14:07 瑞宇 阅读(289) 评论(0) 推荐(0)
摘要:用(x,s)表示一个状态,x表示机器人的位置,s表示其他位置有没有物体。用个fa数组和act数组记录和打印路径,转移的时候判断一下是不是机器人在动。#includeusing namespace std;const int maxn = 16;const int maxe = 32;const in... 阅读全文
posted @ 2015-07-31 11:51 瑞宇 阅读(244) 评论(0) 推荐(0)
摘要:暴力,和八皇后很像,用表示i+j和i-j标记主对角线,但是还是要加一些的剪枝的。1.最裸的暴搜6.420s,差点超时2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放0.400s#include#includeconst int maxn = 11;char G[maxn][maxn];i... 阅读全文
posted @ 2015-07-31 10:45 瑞宇 阅读(285) 评论(0) 推荐(0)
摘要:坑坑的题目,我只想说:题意不清楚也就算了。。包含不合法数据也就算了。。篮球还有平局也算是很diao了。。。吐槽结束。题解:不难发现当之前比分为2,当前比分为1,有两种情况,得分低的一组得3分反超,或者得1分。因为只关心最后的结果,每轮都是独立的,所以答案是加一。。。之前比分是1,当前比分是2类似。然... 阅读全文
posted @ 2015-07-30 21:43 瑞宇 阅读(201) 评论(0) 推荐(0)
摘要:题意:询问单源最短路径,每条边有一个颜色,要求路径上相邻边的颜色不能相同,无重边且边权为正。题解:因为路径的合法性和边的颜色有关,所以在做spfa的时候,把边丢到队列中去,松弛的时候注意判断一下颜色,d数组表示到这条边的出点v的距离。期望复杂度是O(km),k是边入队次数,m是边数。最后根据边来松弛... 阅读全文
posted @ 2015-07-29 23:03 瑞宇 阅读(269) 评论(0) 推荐(0)
摘要:题意:给你一个HxW的矩阵,每个点是一个指令,根据指令进行一系列操作。题解:模拟#include#includeusing namespace std;const int maxn = 101;char G[maxn][maxn];int dx[] = {-1,0,1, 0};int dy[] = ... 阅读全文
posted @ 2015-07-29 19:37 瑞宇 阅读(233) 评论(0) 推荐(0)
摘要:关于sg函数这篇blog讲得很详细http://blog.csdn.net/logic_nut/article/details/4711489。sg函数的价值在于把复杂的游戏拆分成简单的游戏,然后通过计算出这些简单游戏的sg值得到复杂游戏的sg值。求sg值的基本方法:是根据状态转移,有些问题可以找到... 阅读全文
posted @ 2015-07-29 19:19 瑞宇 阅读(506) 评论(0) 推荐(0)
摘要:题解:状态压缩之后,暴力dfs,如果有一个选择,能让对手必败,那么就是必胜态,能转移到的状态都是对手的必胜态,或者无法转移,就是必败态。总算是过了,TLE是因为状态没判重。#include#include#include#include#include#include#include#include... 阅读全文
posted @ 2015-07-27 23:05 瑞宇 阅读(424) 评论(0) 推荐(0)
摘要:题意:给一个nXm的矩阵,上面有一些数字,从左上角出发,每次只能往右或者往下,把沿途的数字加起来,求到达右下角的最大值是多少。题解:简单的一个dp,设f[i][j]为到达i行j列的最大值,f[i][j] = max(f[i-1][j],f[i][j-1])+a[i][j],然后用队列刷表法。#inc... 阅读全文
posted @ 2015-07-27 18:28 瑞宇 阅读(284) 评论(0) 推荐(0)
摘要:题意:统计一些串中,字母的出现频率,不分大小写,找出现频率最高5个字符(相同频率优先取字典序大的),把他们的对应的值加起来判断以下是否大于62。没出现的不算。#include#include#includeusing namespace std;typedef long long ll;char s... 阅读全文
posted @ 2015-07-27 18:19 瑞宇 阅读(457) 评论(4) 推荐(0)
摘要:根据题意略推一下,其实就是问你满足(a*(a+1))/2 using namespace std;typedef long long ll;int main(){ int T; scanf("%d",&T); for(int k = 1; k > 1; b1 ... 阅读全文
posted @ 2015-07-27 18:13 瑞宇 阅读(216) 评论(0) 推荐(0)
摘要:因为只能买一次,暴力枚举一下买的衣服的大小。#include#include#includeusing namespace std;typedef long long ll;#define fi first#define se secondconst int maxn = 1e5+5;map S;i... 阅读全文
posted @ 2015-07-27 18:07 瑞宇 阅读(454) 评论(0) 推荐(0)
摘要:读懂题意就是水题,按照出现次数对下标排一下序,暴力。。#include#include#includeusing namespace std;typedef long long ll;const int maxn = 1e4+77;ll cnt[maxn];ll r[maxn];bool cmp(i... 阅读全文
posted @ 2015-07-27 18:04 瑞宇 阅读(311) 评论(0) 推荐(0)
摘要:题意:八数码,但是转移的方式是转动,一共十二种,有多组询问,初态唯一,终态不唯一。题解:初态唯一,那么可以预处理出012345678的所有转移情况,然后将初态对012345678做一个映射,再枚举一下终态的所有情况,取最小值即可。学了逆cantor展开,cantor展开是一个变进制数,每位上是原序列... 阅读全文
posted @ 2015-07-26 22:22 瑞宇 阅读(307) 评论(0) 推荐(0)
摘要:题意:有两种颜色的小球形成环,求最小交互次数使球相连。题解:先解决另一个简单的问题,如果是一个链,把红球标记为1,蓝球标记为0,要排成升序需要多少次交换呢?答案是逆序对总数,原因是一次交互最多消除一个逆序对,而且有策略可以保证每次消除一个逆序对。要解决这个问题,需要做一些变通。看蓝球,因为是环,为了... 阅读全文
posted @ 2015-07-26 22:06 瑞宇 阅读(389) 评论(0) 推荐(0)
摘要:题意:在一条狭窄的沼泽上有一列数量为n的连续荷叶,编号为1-n。有一只蛤,在边s号荷叶上,其他荷叶上苍蝇,哈可以跳到相邻的荷叶上,或者越过一片荷叶,跳完以后原来的荷叶会沉,目标是f荷叶,在跳到f荷叶之前要吃掉其他所有的苍蝇。在这个前提下,希望尽量少跳相邻的荷叶,输出跳相邻荷叶的次数。题解:分析先考虑... 阅读全文
posted @ 2015-07-25 16:42 瑞宇 阅读(598) 评论(4) 推荐(0)
摘要:题意:给你一串非负整数,可以将一个非零数减1,加到相邻的数字上,要使其中所有最大数字的和最小。题解:模拟可以过。也可以分析,可以要减少最大数字和,如果最大数字出现大于等于3次,可以把最大数字加一,或者把某个最大数字减一,最大数字出现减少一次。但是要注意一些特殊情况,下面详述。先扫一遍,如果最大数字为... 阅读全文
posted @ 2015-07-25 16:42 瑞宇 阅读(250) 评论(0) 推荐(0)
摘要:题解:读懂题意按照题意模拟。。。熟悉了一个库函数,strstr,memcpy#include#includeint main(){ int N; char str[150]; int cnt[3] = {0}; scanf("%d",&N); getchar(); fo... 阅读全文
posted @ 2015-07-25 16:42 瑞宇 阅读(143) 评论(0) 推荐(0)
摘要:题意:给你n个点,将这些点放在一个环上,问你不相交的连k条线的方案数。(没有重点)题解:dp[i][j]表示i个点连j条线的方案数,那么新加一个点i,情况1,i没有和之前的点相连,方案数为dp[i-1][j];情况2,i和p号点相连(0#include#include#include#include... 阅读全文
posted @ 2015-07-25 16:42 瑞宇 阅读(336) 评论(0) 推荐(0)
摘要:题意:给一个式子,ak,k>2时,0#include#include#include#include#includeusing namespace std;typedef unsigned long long ull;int main(){ ull p,q; scanf("%I64u%I... 阅读全文
posted @ 2015-07-25 16:42 瑞宇 阅读(370) 评论(0) 推荐(0)
摘要:题意:给你一些钟的时间,只可以往后调, 问最少调的时间总和是多少题解:因为肯定是调到某个出现过时间的,只要枚举时间,在维护一个前缀和快速计算出时间总和就行了。#include#include#include#include#include#include#define first fi#define... 阅读全文
posted @ 2015-07-25 16:41 瑞宇 阅读(344) 评论(0) 推荐(0)
摘要:题意:给你n张卡,每张卡上有蓝色和红色的两种数字,求一种排列使得对应颜色数字之间形成的逆序对总数最小题解:贪心,先按蓝色排序,数字相同再按红色排,那么蓝色数字的逆序总数为0,考虑交换红色的数字消除逆序,那么这个操作的代价是蓝色的数字逆序对增加2*len-3,而红色的数字交换最多也只能消除那么多对逆序... 阅读全文
posted @ 2015-07-23 19:35 瑞宇 阅读(327) 评论(0) 推荐(0)
摘要:A题,超级大水题,根据有没有1输出-1和1就行了。我沙茶,把%d写成了%n。B题,也水,两个矩形的长和宽分别加一下,剩下的两个取大的那个,看看是否框得下。C题,其实也很简单,题目保证了小三角形是正三角形,一个正三角的面积=l*l*(1/2)*cos(30),由于只要算三角形个数,把六边形扩成一个大三... 阅读全文
posted @ 2015-07-23 11:13 瑞宇 阅读(215) 评论(0) 推荐(0)
摘要:好题,当时想了半个小时,我往图论方面去想了,把出现过的字符串当场点,然后相互连边,那么就构成了一个三角形,一个大于三个点的连通分量里有以下结论:度为二的点可能是track,度为大于二的点一定不是track,当一个点连接一个可能是track的点和一个可能是artist的点,那么这个点就可能是ablum... 阅读全文
posted @ 2015-07-22 09:50 瑞宇 阅读(302) 评论(2) 推荐(0)
摘要:题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它。一个人从1号点出发,给出初始金钱,问你能不能访问所以的点,并且获得所以证书。题解:目标是那些一定要访问的点,怎么到达的我们不关心,但是我们关心... 阅读全文
posted @ 2015-07-21 21:29 瑞宇 阅读(248) 评论(3) 推荐(0)
摘要:题意:给一些带颜色的点,求一个最小的矩形,恰好包括一半的红色点,且不包括蓝色点。题解:暴力,求个二维前缀和,用容斥原理更新一下。N很小所以我采用了离散优化,跑了个0ms。之前没写过二维前缀和,加上离散写得也不是很熟练,所以搞了2个小时,好在是一发就过了。貌似有个坑,线不要特判,不然wa。#inclu... 阅读全文
posted @ 2015-07-21 18:31 瑞宇 阅读(233) 评论(2) 推荐(0)
摘要:题意:给你一个序列,和标准序列连线,求交点数。题解:就是求逆序对个数,用树状数组优化就行了。具体过程就是按照顺序往树状数组了插点(根据点的大小),因为第i大的点应该排在第i位,插进去的时候他前面本该是有i-1个点的,如果少了,那么一定就和这个元素构成了逆序对。#include#include#inc... 阅读全文
posted @ 2015-07-21 18:22 瑞宇 阅读(166) 评论(0) 推荐(0)
摘要:题意:求空间两线的最短距离和最短线的交点题解:线性代数和空间几何,主要是用叉积,点积,几何。知道两个方向向量s1,s2,求叉积可以得出他们的公共垂直向量,然后公共垂直向量gamma和两线上的点形成的向量做内积,在除掉gamma的长度就得到投影,即是最短距离。然后求两个点可以用gamma和s2的叉积和... 阅读全文
posted @ 2015-07-20 19:23 瑞宇 阅读(243) 评论(0) 推荐(0)
摘要:神坑题。这题的坑点有1.判断连通,2.有重边,3.至少要有一个人背炸药因为有重边,tarjan的时候不能用子结点和父节点来判断是不是树边的二次访问,所以我的采用用前向星存边编号的奇偶性关系,用^1来判断是不是树边#include#include#includeusing namespace std;... 阅读全文
posted @ 2015-07-20 08:18 瑞宇 阅读(337) 评论(0) 推荐(0)
摘要:博主图论比较弱,搜了模版也不会用。。。所以决心学习下tarjan算法。割点和割边的概念不在赘述,tarjan能在线性时间复杂度内求出割边。重要的概念:时间戟,就是一个全局变量clock记录访问结点的时间。一个无向图dfs会形成一个森林,当图只有一个连通分量时,就只有一棵树。由于在无向图中,除了树边,... 阅读全文
posted @ 2015-07-19 21:37 瑞宇 阅读(743) 评论(0) 推荐(0)
摘要:题意:问两个迷宫是否存在公共最短路。题解:两个反向bfs建立层次图,一遍正向bfs寻找公共最短路#include#include#includeusing namespace std;const int maxn = 500+1;int d1[maxn][maxn];int d2[maxn][max... 阅读全文
posted @ 2015-07-19 11:25 瑞宇 阅读(311) 评论(0) 推荐(0)
摘要:题意:给你一堆牌,和一些洗牌机,可以改变牌的顺序,问你能不能通过洗牌机把数字为x的牌洗到第一个位置。题解:反向建边,dfs判断连通性#include#includeusing namespace std;const int maxn = 200000+4;int a[maxn];vector son... 阅读全文
posted @ 2015-07-19 09:53 瑞宇 阅读(352) 评论(0) 推荐(0)
摘要:题意:给你一个函数和一些系数,给你一堆询问,求函数值。根据s的符号,分成两组讨论,函数值与比x小的系数数量有关,二分输出答案。#include#includeusing namespace std;const int maxn = 200000+1;int A[maxn];int B[maxn];i... 阅读全文
posted @ 2015-07-19 09:10 瑞宇 阅读(294) 评论(2) 推荐(0)
摘要:题意:给n个元素,从n中选两个非空集合A和B。问有多少中选法?递推:dp[n]表示元素个数为n的方案数,对于新来的一个元素,要么加入集合,要么不加入集合自成一个集合。加入集合有三种选择,A,B,E(可空的集合),或者自成集合,作为A或B,然后在选一个n-1个元素的非空子集(2^n-1 - 1)。#i... 阅读全文
posted @ 2015-07-19 00:37 瑞宇 阅读(321) 评论(0) 推荐(0)
摘要:题意:给两个一样的只含有26个小写字母的字符串,然后两个分别做一下排列,问如果对应位置的字母相等那么就愉悦值就加一,问愉悦值的期望是多少?题解:只考虑两个序列相对的位置,那么就相当于固定一个位置,另外一个序列做排列。对于一个字符,假设是a,然后a有Na个,那么a选第一个序列中a对应的位置,发生这个事... 阅读全文
posted @ 2015-07-19 00:00 瑞宇 阅读(482) 评论(0) 推荐(0)
摘要:根据兔子试药情况可以缩小范围,如果死了,不在试过的药里面,如果活着,在试过的药里。最糟的情况: 两个原则 1.能确定魔药所在的范围的尽量大,2.死得兔子尽量多。如果当前不知道情况的药n为k的二倍以上,那么基于上面两个原则,试过药的兔子肯定会死。没死:范围k,损失的兔子0死了:范围n-k,损失的兔... 阅读全文
posted @ 2015-07-18 21:18 瑞宇 阅读(389) 评论(2) 推荐(0)
摘要:题目背景是以前用来对网页进行排名的Page Rank算法,是早期Google的革命性发明。背后的原理是矩阵和图论。这个数学模型是由Google的创始人拉里·佩奇和谢尔盖·布林发现的。如果一个网页被很多网页链接那么它的排名就高,当然不同的网页应该用不同的权值加以区分,一个网页的排名来自指向它的网页权值... 阅读全文
posted @ 2015-07-18 11:23 瑞宇 阅读(286) 评论(0) 推荐(0)
摘要:题意:移动一个矩形,使矩形内包含的点尽量多。思路:把一个点拆成两个事件,一个进(权值为1)一个出(权值为-1),将所有点按照x排序,然后扫描,对于每个x,用一个滑窗计算一下最大值,再移动扫描线。树状数组可以实现。上面方法其实不是最优的,目前所知最优的办法是把一个矩形压缩成一个点,而一个点延伸为一条线... 阅读全文
posted @ 2015-07-18 00:03 瑞宇 阅读(402) 评论(0) 推荐(0)
摘要:虽然这题可以用暴力n^3过,但是还有有种n^2的方法的,枚举b,对于b,分别枚举a和c,得到对于这个b的最优解,然后从所以b中选一个最优的。要保证字典序最小,只要从小往大枚举就好了感谢moonflyer#include#include#include#includeusing namespace s... 阅读全文
posted @ 2015-07-17 23:37 瑞宇 阅读(219) 评论(2) 推荐(0)
摘要:对于每个元素,最理想的情况就是都在它的左边或者右边,那么sort一下就可以得到一个特解了,然后大的中间不能有小的元素,因为如果有的话,那么无论选小的还是选大的都不是最优。对小的元素来说,比它大的元素在哪里是没有关系的。所以把大的看作一个整体,然后插空法算出总方案数。答案用llu存#include#i... 阅读全文
posted @ 2015-07-17 22:17 瑞宇 阅读(287) 评论(0) 推荐(0)
摘要:题意:分段用椎台面积近似计算体积,然后计算出近似值和真实值的相对误差微积分加数学。平头椎台的体积计算公式:V = 1/3*h*(S1+S2*sqrt(S1*S2)一个更快的计算多项式值的方法: for(int i = 15; i >= 0; i--) ans = ans*x+p[i],比直接pow快... 阅读全文
posted @ 2015-07-17 20:42 瑞宇 阅读(508) 评论(0) 推荐(0)
摘要:二分图最大匹配问题遇到冰山就把行列拆成两个部分。每个部分x也好,y也好只能匹配一次图画得比较草,将就着看横着扫一遍,竖着扫一遍,得到编号一个位置就对应一个(xi,yi)就是X集到Y集的一条边,由题意,每个点只能被选择一次。所以最大匹配的边数就是答案了。算法过程当增广路不存在的时候,就是二分图最大匹配... 阅读全文
posted @ 2015-07-17 19:22 瑞宇 阅读(543) 评论(0) 推荐(0)
摘要:比较坑的水题,首项前面的符号,-1,+1,只有数字项的时候要输出0。感受一下这些数据160 0 0 0 0 0 0 0 0 -10 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0-1 0 0 0 0 0 0 0 0 0-1 -1 -1 ... 阅读全文
posted @ 2015-07-17 14:14 瑞宇 阅读(201) 评论(0) 推荐(0)
摘要:加一个维度,钥匙的状态,状压一下。n很小,钥匙也只有10个,bfs就好了。忘了数组初始化。以后坚决不犯这种低级错误。#include#include#includeusing namespace std;const int maxn = 50+1;int g[maxn][maxn][4];int k... 阅读全文
posted @ 2015-07-17 14:10 瑞宇 阅读(146) 评论(0) 推荐(0)
摘要:一道贪心的题,因为最小的不能由别的转化,所以每次贪心找最小的,其余的转化成大的。从小到大,最小的如果不存在那么就break,否则减去一个,剩下的加k继续判断。#include#includeconst int maxn = 300;int cnt[maxn];int main(){ int T... 阅读全文
posted @ 2015-07-17 14:05 瑞宇 阅读(112) 评论(0) 推荐(0)
摘要:题意,给一个数字矩阵,要求从上往下的一条路径,使这条路径上数字之和最小,如有多条输出最靠右的一条。数字三角形打印路径。。。一般打印路径有两种选择,一是转移的时候加以记录,二是通过检查dp值回溯。#include#include#includeusing namespace std;const int... 阅读全文
posted @ 2015-07-17 14:01 瑞宇 阅读(192) 评论(0) 推荐(0)
摘要:没必要每次都真的修改一遍字母值,用一个标记表示字母最后的值,最后一遍的时候再进行修改#include#includeconst int maxlen = 1000000+10;char str[maxlen];char to[256];int main(){ //freopen("in.txt... 阅读全文
posted @ 2015-07-16 20:55 瑞宇 阅读(347) 评论(0) 推荐(0)
摘要:一道物理题,解个2次方程就行了。。。求h最小的情况对应如下图所示做法不唯一,我想避免精度损失所以在化简的时候尽可能地去避免sqrt和浮点数乘除。似乎精度要求很低,直接用角度算也可以#include#includeint main(){ int T; scanf("%d",&T); ... 阅读全文
posted @ 2015-07-16 20:26 瑞宇 阅读(363) 评论(1) 推荐(0)
摘要:思路就是有零一变化的位Or以后一定是1,And以后一定是0;那么如果b的二进制更长那么就把包含a的部分全部置为1或0,如果一样长那么就把不同的部分置为1或0。今天被这题坑的地方:1默认是int,如果要移到32bits以上要转成long long用1LL,血的教训。以及,数组开得太极限,很容易出错。#... 阅读全文
posted @ 2015-07-16 19:28 瑞宇 阅读(300) 评论(0) 推荐(0)
摘要:一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化。预处理:预判一下并保存下一个可以放的位置距离之前的距离。这样可以减少很多判断。最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于等于ans,那么对答案没有贡献,可以剪去。优化:占用和不占用两种状态,如果横向来看可以压缩为int,判断... 阅读全文
posted @ 2015-07-14 15:48 瑞宇 阅读(559) 评论(0) 推荐(0)
摘要:多联骨牌的生成办法,维基上只找到固定的骨牌fix,而free的没有找到。于是只好写个set判重的简单枚举了。旋转的操作,可以在坐标轴上画个点,以原点为轴心,逆时针旋转90度,新的点的坐标为(-y,x)。顺时针也差不多。反转类似。对于操作完的骨牌,还要进行标准化,取最小的横纵坐标为参考,求出新的坐标,... 阅读全文
posted @ 2015-07-13 23:53 瑞宇 阅读(535) 评论(0) 推荐(0)
摘要:读懂题意以后还很容易做的,和AbbottsRevenge类似加一个维度,筛子的形态,可以用上方的点数u和前面的点数f来表示,相对的面点数之和为7,可以预先存储u和f的对应右边的点数,点数转化就很容易了。具体做法看代码#includeusing namespace std;const int maxn... 阅读全文
posted @ 2015-07-13 23:47 瑞宇 阅读(442) 评论(0) 推荐(0)
摘要:非常适合A*的一道题。比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量。#include#include#includeusing namespace std;const int MAX = 21;int m,n,k;int C[MAX][MAX][MAX];int G[MAX][MAX];i... 阅读全文
posted @ 2015-07-10 21:53 瑞宇 阅读(726) 评论(0) 推荐(0)
摘要:根据先序历遍和中序历遍输出后序历遍,并不需要真的建树,直接递归解决#include#includeconst int N = 30;char preOrder[N];char midOrder[N];char S[N];int top;void solve(char *pre,char *mid,i... 阅读全文
posted @ 2015-07-10 21:47 瑞宇 阅读(549) 评论(0) 推荐(0)
摘要:看上去非常像背包的问题,但是体积太大了。线性规划的知识,枚举附近点就行了,优先选性价比高的,宝物有两种体积为S0,价值V0,体积S1,价值V1。枚举分以下几种:1:枚举拿宝物1的数量,然后尽量多拿宝物2;O(N/S0)2:枚举拿宝物2的数量,同上;O(N/S1)3.贪心,尽量选性价比高的令gcd(S... 阅读全文
posted @ 2015-07-10 19:38 瑞宇 阅读(730) 评论(2) 推荐(0)
摘要:题意就是给一张无向图,去掉某些结点,然后连成一条链,问最少去掉几个结点。n很小n=n-1。#includeusing namespace std;const int maxn = 15;int G[maxn][maxn];int n;int c[maxn];bool dfs(int u,int s,... 阅读全文
posted @ 2015-07-10 19:17 瑞宇 阅读(285) 评论(0) 推荐(0)
摘要:骨牌无非两种放法,横着或竖着放,每次检查最r,c最小的没访问过的点即可。如果不能放就回溯。最外面加一层认为已经访问过的位置,方便判断。#includeconst int MAXD = 56;const int MAXB = 29;const int MAXP = 7;bool used[MAXB];... 阅读全文
posted @ 2015-07-10 19:07 瑞宇 阅读(329) 评论(0) 推荐(0)
摘要:剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点。剪枝2:当前位置怎么也走不回去。3:沿途判断障碍即可。在oj上提交0.347s,最快的0.012s,应该有更好的做法。#includeconst char *bin = "ensw";const int dx[]... 阅读全文
posted @ 2015-07-10 19:02 瑞宇 阅读(372) 评论(2) 推荐(0)
摘要:要输出所有路径,又要字典序,dfs最适合了,用并查集判断1和目的地是否连通即可#includeusing namespace std;const int maxn = 21;int p[maxn],cnt[maxn];void init(int n) { for(int i = 1;i <= ... 阅读全文
posted @ 2015-07-10 18:51 瑞宇 阅读(258) 评论(0) 推荐(0)
摘要:最容易想到的办法是暴力枚举,但是每次计算需要在统计上花费很多时间,单调栈的优势就体现出来了,用单调栈维护一些有用的信息,帮助快速计算矩形面积单调栈,保证每个矩形高度依次递增,维护一个拓展宽度。由单调栈的性质,栈内元素都不能向之前的元素延伸。当1,2,3依次入栈,单调,所以维护前拓宽度w=1。当访问到... 阅读全文
posted @ 2015-07-08 23:37 瑞宇 阅读(339) 评论(0) 推荐(0)
摘要:首先说说IDS,就DFS限定一个层数上限maxd,如果在maxd范围内没有找到解,就增加maxd,继续搜索。当访问到当前结点u时,估计还要搜索h(u)层,如果h(u)+当前层数d>maxd的时候就剪枝,这就是IDA*。IDA*属于DFS,当状态空间某一层的结点数无穷大时,BFS失效,只能DFS。相比... 阅读全文
posted @ 2015-07-08 12:17 瑞宇 阅读(1643) 评论(0) 推荐(0)
摘要:看到next_permutation好像也能过╮(╯▽╰)╭这题学习点:1.建图做映射2.通过定序枚举保证字典序最小3.strtok,sscanf,strchr等函数又复习了一遍,尽管程序中没有实际用上4.剪枝,或者回溯#includeusing namespace std;int G[8][8],... 阅读全文
posted @ 2015-07-07 22:31 瑞宇 阅读(401) 评论(0) 推荐(0)
摘要:这题数据大容易TLE优化:预处理, 可以先枚举出5^3的状态然后判断合不合法,但是由于题目说了有很多墙壁,实际上没有那么多要转移的状态那么可以把底图抽出来,然后3个ghost在上面跑到时候就不必判断了,减少了两次无用的枚举。减少代码的方法:1.结点没有3个时增加冗余点,2.把位置坐标二元组编号成一个... 阅读全文
posted @ 2015-07-07 00:57 瑞宇 阅读(998) 评论(1) 推荐(0)
摘要:题意,给你一颗树的bfs序和dfs序,结点编号小的优先历遍,问你可能的一种树形;输出每个结点的子结点。注意到以下事实:(1)dfs序中一个结点的子树结点一定是连续的。(2)bfs,dfs序中的一个结点u的后续结点一定是u或u的后兄弟结点{v},或u和{v}的后代节点{s}。(3)如果有后兄弟结点,那... 阅读全文
posted @ 2015-07-05 20:27 瑞宇 阅读(2614) 评论(1) 推荐(4)
摘要:一道关乎人生完整的问题。DBFS的优越:避免了结点膨胀太多。假设一个状态结点可以扩展m个子结点,为了简单起见,假设每个结点的扩展都是相互独立的。分析:起始状态结点数为1,每加深一层,结点数An = An-1*m。假如搜索了i层找到终点,那么经过的结点数是O(i^m),如果从两边同时搜索,结点数是O(... 阅读全文
posted @ 2015-07-05 11:27 瑞宇 阅读(330) 评论(0) 推荐(0)
摘要:InputEach input set consists of a sequence of 52 integers separated by spaces and/or ends of line. The integers represent card values of the initial d... 阅读全文
posted @ 2015-07-04 00:24 瑞宇 阅读(455) 评论(0) 推荐(0)
摘要:InputInput data to the program specifies the order in which cards are dealt from the pack. The input contains pairs of lines, each line containing 26 ... 阅读全文
posted @ 2015-07-03 18:57 瑞宇 阅读(337) 评论(0) 推荐(0)