摘要:
题意: 求一个无向图的点连通度。分析: 把一个点拆成一个入点和一个出点,之间连一条容量为1的有向边,表示能被用一次。最大流求最小割即可。套模板就好代码; #include #include #include #include #include using namespace std;cons... 阅读全文
摘要:
题意: 给定n个物品的重量,无限个容量为m的箱子,每个箱子最多装两个物品,要把所有的物品都装下,最少需要多少个箱子。分析: 每次将最重和最轻的两个物品放到一个箱子里,如果装不下,则将最重的单独装到一个箱子里。代码: #include #include #include #include usi... 阅读全文
摘要:
题意: 给出一系列字符串,构造出一个字符串大于等于其中的一半,小于另一半。分析: 取大小为中间的两个a,b(a#include #include #include using namespace std;string a[1010];string res;int n;int main(){ ... 阅读全文
摘要:
题意: 两个等长的字符串p和q,p有‘0’,‘1’,‘?’组成,q由‘0’,‘1’组成。有三种操作:1.将‘?’变成0;2.将‘?’变成‘1’;3.交换同一字符串任意两个位置上的字符。问有p变到q最少需要几次操作。分析: 若两个位置上的字符相同,则不用处理;能交换位置便交换位置,这样能一次改变两... 阅读全文
摘要:
题意: 给你一个n位整数,让你删掉d个数字,剩下的数字要尽量大。分析: 用了vector数组模拟。如果当前要插入的数>vector数组里的最后一位数,就替换且d--代码: #include #include#include#include using namespace std;vector ... 阅读全文
摘要:
题意: 输入一个1-n的排列,要求经过操作将其变换成一个生序序列。操作的规则如下每次操作时,可以选一个长度为偶数的连续区间,交换前一半和后一半。分析: 假设操作到第i个位置,而i这个数刚好在pos这个位置上,现在就要判断一下能否直接将pos上的i经过操作调到i这个位置上。如果 i + (po... 阅读全文
摘要:
题意: 给出一个1到n的排列,给出操作顺序,使升序排列能变为所给排列。分析: 正常冒泡排序的想法。如果前两个数,前面的大于后面的,则换(特例是n,1不能换)。否则,就用2的逆操作,把最后的数放前面。不过用了vector数组存放代码: #include #include #include #in... 阅读全文
摘要:
题意: 输入n个数,第i个数ai满足1≤ai≤i。对每个数添加符号,使和值为0。分析: 排序后从最大的元素(假设为k)开始,凑出sum/2即可。用去掉了k的集合,一定可以凑出sum/2 - a[k]。只要sum是偶数,就一定会有解。代码: #include #include #include ... 阅读全文
摘要:
题意: 钢铁公司有N个客户的订单,每个订单有一个产量q(生产时间刚好也等于q)和订单完成截止时间。公司要求完成尽量多的订单。分析: 先按截止时间d排序,然后维护一个已经选好的订单的优先队列,如果当前无法选择的话,那么尝试和之前花费时间最长的交换。如果qi#include#include#incl... 阅读全文