![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
文章平均质量分 56
Mori_Miya
这个作者很懒,什么都没留下…
展开
-
POJ_2251题解
http://poj.org/problem?id=2251 题目很简单,就是个三维迷宫题,用广搜可以解决。 在初始化迷宫图的时候在迷宫外围都加上一层 由 ' #' 组成的墙。 Memory:668K Time:16MS #include #include #include using namespace std; struct Level { char m原创 2013-02-08 13:57:50 · 220 阅读 · 0 评论 -
SPOJ 13041 题解
网络流。 建图方法: 超级源到每人各一条容量为1的边,将洞拆成两个i和i+100,每个洞到超级汇各一条容量为1的边。 二分答案,如果人到洞的时间小于之,则加一条边到 i,若人到洞的时间+挖洞时间小于二分的答案,则又加一条边到 i+100。 最后判流量即可。 //time:1460ms #include #include #include #include #include原创 2013-10-12 22:32:17 · 776 阅读 · 0 评论 -
CF#205_题解
A题不解释。。。。 B题,计数,数目大于1的必然各一个,然后计算剩下的数的种类,各取种类的一半,然后剩下的随便分直到各有n个数。 有人问我排序后1 2 1 2 ...这样分为何不行,这里给出一组样例: 4 10 10 10 18 20 20 20 44 #include #include #include #include #define BUG printf("原创 2013-10-11 20:31:41 · 571 阅读 · 0 评论 -
SGU_422_Fast Typing_题解
概率DP。 这题要从后往前推,因为如果从前往后推的话,前面的后面的状态会影响前面的状态。 dp[i]表示正确打完前i个字符后,正确打完剩下字符所需要的最少期望时间 dp[i]=打完i个字符后再打j个字符并检查后再正确打完,0 则 dp[i]=j+t +a[i+1]*(dp[i]+j) // 在第 i+1 位出错原创 2013-10-09 21:25:09 · 439 阅读 · 0 评论 -
HDU_4183_Pahom on Water
问有无从400.0到789.0的无重复点回路。 求400.0和789.0这两个点是否在同一个双连通分量里即可。 Memory:336K Time:0ms #include #include #include #include #include #include #include using namespace std; const double eps=1e-8; const int原创 2013-10-06 09:46:17 · 492 阅读 · 0 评论 -
POJ_2296题解
解法:2-SAT问题 二分枚举边长=mid,当abs(x[i]-x[j]) 记2*i为正方形放在上面,2*i+1为正方形放在下面。 当abs(y[i]-y[j])>=mid时,不妨假设y[i]>y[j],则需要添加边2*i+1->2*j和2*j->2*i。 当0y[j],则一定要一上一下的放正方形,故需要添加边2*i+1->2*i和2*j->2*j+1。 当y[i]==y[j]时,需原创 2013-09-04 23:11:10 · 489 阅读 · 0 评论 -
POJ_3648题解
题意不多说,其实是不想说=。=... 解法:2-SAT问题,设第i对夫妇中,2*i为妻子,2*i+1为丈夫。 若两人有不正常关系,如a和b,则需要添加边a->!b , b->!a (!a和!b表示不选他(她),选其配偶)。 另外还要再加一条0->1的边表示选择新郎。 然后求强连通分量看是否会有bad lucky,若没有bad lucky,则对图进行染色即可。与新娘同色的原创 2013-09-04 11:09:03 · 384 阅读 · 0 评论 -
POJ_2749题解
解法:二分+2-SAT 二分最长路径长度,得出边,将边加上,再加上之前由于hate和friend的边,2-SAT判断下即可。 具体见代码 //time:454ms //memory:3848KB #include #include #include #include #include #include #include #define BUG printf("hehe\n");原创 2013-09-07 01:24:01 · 918 阅读 · 0 评论 -
POJ_2723题解
有m层楼,每层楼通往下一层的门有两个钥匙孔,需要对应编号的钥匙,只需打开一个钥匙孔,门即可打开。有2×n把钥匙,把钥匙分成n组,每组2把。钥匙互不相同,编号为0-2×n-1,每组钥匙其中一把被使用后,两把钥匙都会消失。问:最多到达那一层楼。 输入: n m 以下n行是n组钥匙里每组钥匙的组成编号 以下m行是1-m层的门上的钥匙孔需要的钥匙。注:不同门可能需要同种钥匙,一扇门也可能原创 2013-09-01 01:22:28 · 476 阅读 · 0 评论 -
HDU_4696_Answers
给你n个点,n条边,每个点的出度至少为1。显然,这个图一定有环,因为最糟糕的情况是在一棵树上连接任意两点构成一个环。 容易证明,如果有一个点的权值为1的话,则可以构成任何数字,若所有点的权值都不为1,都为2的话,只能构成偶数。 //time:93ms #include #include #include #include using namespace std; int main()原创 2013-08-26 02:11:37 · 444 阅读 · 0 评论 -
HDU_4701_Game
令si=Ci+Ci+1+++++Cn; 设先手有x元,后手有y元; 设 win(i,x) 表示当前可以买的物品是 i,先手有 x 元,先手是否必胜; win(i,x)等价于 存在j>i,使得x>=si-sj且 win(j,y)==0; 不难证明,当先手有a元可以必胜时,当先手钱数>=a亦必胜; 设m(i)是当前可以买的物品是i时,必胜所需要的最少钱数,故win(i,x)==1等价于x>原创 2013-08-25 13:44:01 · 607 阅读 · 0 评论 -
HDU_4699_Editor
用两个栈对光标的操作进行维护即可。 //time:718ms #include #include #include #include #include using namespace std; const int N=1000010; int sum[N],ans[N]; int cur; stack s1,s2; void init() { wh原创 2013-08-25 16:17:29 · 443 阅读 · 0 评论 -
HDU_4691 Front compression
//题意就不啰嗦了,据说数据很水,暴力也可以A。。不过,觉得后缀数组才是正道。 //time:1234ms #include #include #include #include using namespace std; const int N=100010; char s[N]; int sa[N],t[N],t2[N],c[N],n; int rank[N],height[N]; voi原创 2013-08-23 00:27:38 · 455 阅读 · 0 评论 -
SPOJ AMR12J 题解
线段树+离散化。 对所有x轴坐标排序后,从左往右扫,对于新添加和撤销的矩阵更新y轴范围所对应的矩阵序号。 查询操作不需要两个y点都查询,因为矩阵不会相交。 //Memory:14336K //Time:1610ms #include #include #include #include #include #include using namespace std; con原创 2013-10-15 01:51:40 · 582 阅读 · 0 评论