02 2019 档案
摘要:有人管蓝桥杯叫暴力杯,现在感觉还是挺贴切的。看到这题首先想到让i从1到n循环,首先判断i中无重复数字,再怎样判断能否用剩下的数构成n - i的假分数。之后看了题解。发现思路错了。 总结两点: 1、蓝桥杯的编程题大多暴力枚举,首先从这个方向想; 2、next_permutation这个函数解决排列的问
阅读全文
摘要:题意: 一个集合里有1到n,两个人轮流从中取数,取出一个数的同时这个数的因子也被取走。取走最后一个数者为胜。判断是否先手必胜。 思路: 一道挺有意思的博弈题。一开始在纸上列出了n为1到6的情况,发现都是先手胜。大胆猜测不管n是多少都是先手胜,发现果真如此。求证方法是后来想到的 现在考虑集合中只有2到
阅读全文
摘要:思路参考自https://www.cnblogs.com/zbh2047/p/9736378.html 贪心 Accepted 6438 234MS 2300K 1054 B G++ #include "bits/stdc++.h" using namespace std; typedef long
阅读全文
摘要:二分 C - Magic Ship GNU C++11 Accepted 31 ms 1700 KB #include "bits/stdc++.h" using namespace std; typedef long long LL; typedef pair<LL, LL> PLL; const
阅读全文
摘要:看到这题讨论版里有说用公式的有说用循环节的,但是个人觉得这两种方法都不靠谱,比赛场上做这种题能直接推出公式需要很强数学功底,而循环节的方法如果循环节比较大就不太好发现了。这种已知通项公式的题还是用矩阵快速幂比较通用,但同是矩阵快速幂,对于这题,也有很大的差异; 注:memmove这个函数可能不太常见
阅读全文
摘要:题意: 输入一个M,然后M次操作。'B'表示增加一个点,坐标为(x, y),如果存在不操作。'D'表示删除一个点,坐标为(x, y),如果不存在不操作。'Q'表示一次询问,输出给定范围内点的个数。 思路1: 如果本题将二维转换成一维。可以用前缀和的思想,假如求线段[y1, y2]上面点的数量可以用[
阅读全文
摘要:欧拉筛 Accepted 2824 343MS 24856K 546 B G++ #include "bits/stdc++.h" using namespace std; typedef long long LL; const int MAXN = 3000005; LL euler[MAXN];
阅读全文
摘要:kmp Accepted 2594 0MS 1484K 671 B G++ #include "cstdio" using namespace std; const int MAXN = 50005; char s1[MAXN], s2[MAXN]; int next[MAXN] = {-1}; v
阅读全文
摘要:思路: 将输入的字符串转换成字典序最小的表示形式,存入set去重。用字典序最大的形式表示也是一样的; 最小表示法 Accepted 2609 62MS 3296K 804 B G++ #include "bits/stdc++.h" using namespace std; char s[205];
阅读全文
摘要:题意: 输入n和m,求n!转换成m进制之后末尾有多少个0; 思路: 转换一下题意就可以看成,将n表示成x * (m ^ y),求y的最大值。^表示次方而不是异或; 这就比较好想了,将m分解质因数,对于每个质因数,设n!含有a个,m含有b个,则ans = min(ans, a / b); 自己比赛的时
阅读全文
摘要:欧拉函数 Accepted 2588 15MS 1372K 916 B G++ #include "bits/stdc++.h" using namespace std; int euler(int n) { int ans = n; for (int i = 2; i * i <= n; i++)
阅读全文
摘要:这题是AC自动机的模板题,AC自动机是结合了字典树,和KMP两种算法产生的,去年为了学习AC自动机去看了前面说的两种算法,但是可能因为KMP当时理解的不够透彻所以这题当时也只是半背代码的做出来了,没多久就忘了。经过那么久的学习感觉KMP掌握的差不多了,今天回顾了一下AC自动机,并记录一下模板 AC自
阅读全文
摘要:题意: 输入q,然后输入q个a,对于每个a,找到一个b,使gcd(a ^ b, a & b)最大,输出这个最大的gcd; 思路: 用k表示a二进制最高位的二进制编号,1,2,4,8对应1,2,3,4; 假如a不是 (1 << k) - 1这种形式的,那么总能找到一个b使a ^ b == (1 <<
阅读全文
摘要:前两天过年,所以两天前的比赛题目现在才来回顾。 这题是一个最平常的递归,加一个剪枝。题目说如果一段距离没有复仇者看守,消耗的能量为A,A一定是正整数。由此可知对于没有复仇者看守的段,不拆一定比拆成两半划得来。只有当这段距离有复仇者看守时,才比较拆开来划算还是不拆划算; 复仇者最多只有1e5个,所以不
阅读全文
摘要:首先,对于这题我们要知道要删除一个数使平均值最大一定是删除最小的数,然后我们假设删除操作执行了i次,也就是删除最小的i个数。在已知删除操作次数之后求增加操作的次数就容易了,当然是m - i和k * (n - i)中比较小的数啦。用一个ans变量记录结果,遍历i,更新ans,得到最终的ans。 B -
阅读全文
摘要:首先我们来求第m次移动的盘子号数,先列出当m比较小可以直接观察的前几项 m : 1、2、3、4、5、6、7、8、9、10 id : 1、2、1、3、1、2、1、4、1、2 很容易联想到树状数组的lowbit,这题的id就是lowbit(m)在二进制中的编号。 for (id = 1; (m & 1)
阅读全文
摘要:可以用贪心求最小讲课次数,贪心策略也很好想,就是对于任意主题,能早讲就早讲。这种方案的讲课次数一定是最少的,但是不满意指标不一定是最小,然后再利用动态规划求在最少讲课次数前提下的最小不满意指标。 方法一(自己想到的) Accepted 1183 C++11 1020 4240 #include "b
阅读全文

浙公网安备 33010602011771号