题意与分析 2018ICPC北京站A题. 题意是这样的,给定若干人的武力值大小(A B的意思是A比B厉害),问到第几行会出现矛盾. 这题不能出现思维定势,看到矛盾就是矛盾并查集--A>B.A>C是不能推出B>C或者B<C的.相反,大于小于是一种偏序关系,是可以建立有向图的.那么,如果这个有向图中出现了环,就是矛盾的. 问题于是转化为有向图判环问题,这里简单说一下有向图和无向图的判环方法. a) 无向图 删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一.…
P1 : Jin Yong’s Wukong Ranking List Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Description Jin Yong was the most famous and popular Chinese wuxia (The one who fight bad people by his Wukong i.e. Wushu and Kongfu) novelist who lived i…
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为子串不重叠且出现次数最多的串. 看起来很简单对吧,做法也很简单,先排序字符,然后枚举合法的B串能在A串中出现的次数,看能有几个C串,然后求个最优解就行了.是不是很简单?然后WA了十几发,各种捉bug,太杀妈了. 这份代码看起来贼简单,这是我写的第三版了.... 这种字符串题目太苦手了QAQ 代码 #…
与其说是训练不如说是重温.重新写了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;…
题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这么简单我都不会... 简单说下自己的理解. 从原题出发容易得到的朴素算法容易超时,所以要想到转化问题.原题要求1~n的因数之和,反过来说,就是求1~n中有几个数分别是1.2.….n的倍数.这个弯子转过来,题目就容易写了.直接变成O(n)算法. 有趣的是,如果数据规模变为$10^{12}$,这道题该如…
题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代码 #include <bits/stdc++.h> #define MP make_pair #define PB push_back #define fi first #define se second #define ZERO(x) memset((x), 0, sizeof(x)) #de…
今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetStack Computer)的思路敲了半天,但是efficiency是贼鸡儿低,而且最后我搞不明白怎么输出结果了....然后只好参考了这位同学的代码.思路大致是跟着lrj的走的,具体的实现有些需要注意的地方. 代码 #include <bits/stdc++.h> #define QUICKIO #…
题意 给定两个数组c和t,可以对c数组中的任何元素变换\(c_i\)​成\(c_{i+1}+c_{i-1}-c_i\)​,问c数组在若干次变换后能否变换成t数组. 分析 这种魔法题目我是同样的没做过.Editorial里说用差分来能够看出思路.问题是,如何能够想到差分来做?因为它的变换就是相邻的数的加减法,那么想要找到思路的突破口必须也得从这里突破. 考虑变换前后的数组: 原来:\(a_{i-1}, a_i, a_{i+1}\) 之后:\(a_{i-1}, a_{i-1}+a_{i+1}-a_i…
题意 你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 分析 根据官方Editorial的说法,似乎没有一个真正正确的贪心(但是说不定就有人乱搞出来了).这里用dp来解决问题. 这种dp题目我没做过,这次涨姿势了.首先要搞明白一个事实:我们完全可以保证构建一个最优解,其中连续的三元组对于每个数不会出现超过两个--因为如果出现超过三个,就可以拆分成三个相同组.在这样的前提下,我们就可…
代码 for(int i=0; i!=n; ++i) { int u = cin.nextInt(); int v = cin.nextInt(); edges.add(new Edge(u,v)); startpnt = u; if(g.get(u)==null) g.put(u, new ArrayList<Integer> ()); g.get(u).add(edges.size()-1); edges.add(new Edge(v,u)); if(g.get(v)==null) g.p…