题目 以后补 分析 mmp这题把我写蠢哭了 我原来的思路是什么呢? 每轮找min/max,然后两个决策:升min/降max 像这样子dfs找最优,然后花式剪枝 但是一想不对啊,这才1-4,哪有那么复杂 网上一看,沃日丢人现眼了 由于数据范围(没错面向数据范围编程),只要穷举min/max,然后对小于大于min/max进行调整,最后找最优方案即可. 贪心+枚举=人生赢家 真实蠢哭了 代码 /* ID: samhx1 LANG: C++14 TASK: skidesign */ #include <…
题意 之后补充. 分析 这是一条很好的考察递归(或者说搜索)的题目.它的两个过程(建立初步解,验证)都用到了递归(或者说运用递归可以相当程度的减少代码量). 具体实现见代码.注意,为了使用std::pair的比较操作符,代码交换了x.y的位置. 代码 /* ID: samhx1 LANG: C++14 TASK: wormhole */ #include <bits/stdc++.h> #define MP make_pair #define PB push_back #define fi f…
题意 之后补. 分析 这题同样也很精巧.我们不妨思考一下,如果只允许用一块木板,那么要购买多少距离?是整个的距离吗?不是,是从第一个到最后一个(哈哈哈哈哈哈哈).但是,不包括第一个的"左边"和最后一个的"右边".只允许用两块的时候发生了什么变化?可以想见,最好的解是将最宽的那个间隔去掉.以此类推. 以这样的思路就可以得到题目的解法.问题在于各种各样的细节(again):样例数据里面给的牛棚按照顺序但是实际数据它未作保证:然后牛棚的距离记得-1,因为牛棚本身需要盖木板…
题意 圆形链条,打断一处可以形成一条链.问在哪个地方开始打断,能够形成最大的连续颜色(白色视作同样的颜色)? 分析 说起来很高级,但是我们实际上并不需要穷举打断的地方,只需要把串重复三回啊三回.然后从第二个串的左边开始循环找连续颜色的"初始色"(如果是白色,那么左右看看),在初始色的左右找相同.可以看出共有n个初始色的位置,所以算法也就是O(n2)" role="presentation">O(n2)O(n2)的复杂度.然后还有一些细节要处理.作为一…
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为子串不重叠且出现次数最多的串. 看起来很简单对吧,做法也很简单,先排序字符,然后枚举合法的B串能在A串中出现的次数,看能有几个C串,然后求个最优解就行了.是不是很简单?然后WA了十几发,各种捉bug,太杀妈了. 这份代码看起来贼简单,这是我写的第三版了.... 这种字符串题目太苦手了QAQ 代码 #…
题意 分析 这题几乎就是一条dijkstra的问题.但是,如何考虑倒在中间? 要意识到这题求什么:单源最短路的最大值.那么有没有更大的?倒在中间有可能会使它更大. 但是要注意一个问题:不要把不存在的边(边长为inf)算进去:另外,n=1的情况需要注意. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080618 // Author: Sam X //#include <bits/stdc++.h> #include <iost…
题意 分析 问题是要看出来这是个floyd闭包问题.我没看出来- - 分析之后补充. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080618 // Author: Sam X //#include <bits/stdc++.h> #include <iostream> #include <utility> #include <iomanip> #include <cstring>…
题意 分析 变形的dijkstra. 分析题意之后补充. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080518 // Author: Sam X //#include <bits/stdc++.h> #include <iostream> #include <utility> #include <iomanip> #include <cstring> #include <c…
与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStream; public class Main { static class Node { int r, c, t; public Node(int _r, int _c) { this(_r, _c, 0); } public Node(int _r, int _c, int _t) { r=_r;…
题意与分析 题意是这样的:有\(n\)张牌,然后第一行是Adam的牌,第二行是Eve的牌:每两个字符代表一张牌,第一个字符表示牌的点数,第二个表示牌的花色.Adam和Eve每次从自己的牌中选出一张牌进行比较,先看大小再看花色,花色顺序是C,D,S,H(依次增大),谁的牌大谁就加一分,问Eve最多能得到多少分. 思路:最大二分匹配,Eve的牌为集合1,Adam的牌为集合2,集合1中的牌与集合2中比它小的牌建立联系,找最大匹配.这种两个集合的要想到试试二分图. 代码 /* ACM Code writ…