
结论
HbFS-
di4CoveRy
展开
-
[Codeforces][TestingRound#13]C. Interactive Bulls and Cows (Hard)
又是一道交互题,做法相当玄学,反正能过 大部分人好像都是随机随出来的,srand(233333)就可以…… 我的做法看起来不是随机的做法,听起来也很有道理,但我不知道为什么可以这么做每次交互可以筛去一部分不合法的数,我们要合理的输出使得询问次数最少 对于每一个数,和其他数匹配,找出 “若输出这个数,且回复为u,v那么能筛去多少数”,枚举u,v,取能筛去最多数的那个数输出。至于为什么对,大概是给原创 2017-02-06 00:10:18 · 375 阅读 · 0 评论 -
[BZOJ4874]筐子放球
做法很简单,把筐子看成点,球看成连接两条点的无向边,含有奇数条边的连通块即为答案。 思路是转化成图之后,相当于对于每一条边选择一个点使它的点权+1。对于每一个边数为偶数的连通块,存在一种方案使得所有的点权都是偶数;对于每一个边数为奇数的连通块,存在一种方案使得有点数-1的#include <bits/stdc++.h>#define N 1000500using namespace std;原创 2017-06-02 13:39:56 · 490 阅读 · 0 评论 -
[BZOJ4731][UOJ267]魔法小程序
先把代码读懂,可以理解成为c是b的高维前缀和 a[i]a[i]是第ii维的长度 显然长度大于1的维数不会超过log2(m)log_2(m) 暴力还原回b就行了#include <bits/stdc++.h>#define INF 2147483647#define N 1000050using namespace std;typedef long long LL;LL a[10050原创 2017-05-06 14:21:41 · 711 阅读 · 0 评论 -
[NOI2014]魔法森林 二分答案
简单题吧 二进制各个位置是独立的 所以可以一位一位贪心来做 爆枚每一位是0还是1,然后O(n)O(n)验证 时间代价O(Nlog2M)O(Nlog_2M)#include <bits/stdc++.h>#define N 200050using namespace std;inline int rd() { int x=0,f=1;char ch=getchar();原创 2017-05-23 09:20:28 · 527 阅读 · 0 评论 -
竞赛图结论学习小结
定义每对顶点之间都有一条边相连的有向图称为竞赛图.定理1:任意一个竞赛图存在一条Hamiltion路径 证明: ①一个只有一个点的竞赛图存在Hamiltion路径. ②由n个点构成的存在Hamiltion路径的竞赛图,对这条路径上的点按照拓扑序1..n标号,新点标号为n+1. 若存在E(n+1,1)或者E(n,n+1),则可以将新点加载Hamiltion路径的头或者尾,否则必定存在相邻的形如原创 2017-04-18 16:45:51 · 1841 阅读 · 2 评论 -
[codeforces] 501E - Misha and Palindrome Degree
分类大讨论即可若字符串本身就回文,区间可以任意取,否则,若区间[l,r]合法,那么[ll,rr]满足ll<=l且rr>=r的区间都合法,和[l,r]完全没有交集的区间不合法。那么一定能找到一个最小的区间必须被所有合法的区间包含,且包含它的皆为合法的区间,找出来就行了。#include <iostream>#include <cstdio>#include <cstring>#define N原创 2017-01-26 19:21:39 · 528 阅读 · 0 评论 -
[AtCoder2045]Salvage Robots 动态规划
四维动态规划F[a][b][c][d]画一个包含出口的矩形,用来表示哪里已经被访问过了,顺带能表示那些机器人已经被续了 主动递推往四个方向加一行/一列,把活着的机器人统计了就好#include <bits/stdc++.h>#define N 101unsigned short F[N][N][N][N],mp[N][N],sum[N][N];using namespace std;inl原创 2017-03-13 22:08:34 · 581 阅读 · 1 评论 -
[AtCoder2165]Median Pyramid Hard 二分答案
套路题 二分答案,然后把大于等于它的变成1小于等于它的变成0 这样子的中位数是很有规律的 找到最上面那个玩意儿是啥就行了#include <iostream>#include <cstdio>#define N 1000050#define INF (1<<30)#define gc() getchar()using namespace std;int a[N],b[N],n;inl原创 2017-03-13 22:05:59 · 494 阅读 · 0 评论 -
[CERC2016][JZOJ5000]Bipartite Blanket 结论
状态压缩dp,F[mask]表示一边的点集mask是否存在完备匹配(左右各做一次),依据Hall定理转移 将左右所有存在完备匹配的点集合的权值和算出来塞到两个数组里,two pointers判权值和够不够就行了#include <bits/stdc++.h>#pragma GCC optimize(2)#define tn ((1<<n)-1)#define tm ((1<<m)-1)#d原创 2017-03-05 13:46:43 · 804 阅读 · 0 评论 -
[BZOJ4567][Scoi2016]背单词 字典树+贪心
后缀关系可以构成一棵树,这东西用字典树就能求那么等同于说需要把这棵树上的节点放到序列上,显然不可能把父亲放在儿子后面,n2n^2的代价大于任何一种按照dfs序放的代价显然放到序列上是按照dfs序来放的,这个推一推就推出来了 dfs优先走siz小的儿子(这个和树剖刚好相反),正确性显然(小学数学书好像有类似的结论)#include <iostream>#include <cstdio>#incl原创 2017-01-30 18:22:58 · 399 阅读 · 0 评论 -
[BZOJ4563][Haoi2016]放棋子 错排公式+高精度
诶我感觉我在刷水题啊#include <iostream>#include <cstdio>#define N 2050using namespace std;int n;struct num{ int d[N],w; void print() { for (int i=w;i>=1;i--) printf("%d",d[i]); printf("\n");原创 2017-01-30 15:38:25 · 516 阅读 · 0 评论 -
[GDKOI2016] Day1 不稳定的传送门 结论
对每个点可以走的传送门排序算期望即可 对于任意两个可以走的传送门推一个偏序关系就可以了#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#define N 200050#define INF 1<<30using namespace std;typedef double db;db F[N];原创 2017-01-27 23:33:30 · 414 阅读 · 0 评论 -
[Codeforces goodbye2016] D. New Year and Fireworks
注意到棋盘大小很小,可以开棋盘大小*8的数组来记录所有的状态,重复的可以只记一个,每次扫一遍即可比赛的时候想到解法一阵乱敲一次就过了,真是狗屎运 比赛时写的代码,没想那么多也没有注重代码的美观#include <iostream>#include <cstdio>#include <cstring>using namespace std;int map[2][310][310][8];int原创 2017-01-26 18:10:50 · 452 阅读 · 0 评论 -
[BZOJ3721]PA2014 Final Bazarek 单调性
这题想起来挺简单的,两三分钟就出结论了,写起来也快,结果前几发提交用了I64d,卡了好久对于答案x,最后的决策一定是取奇数个奇数和任意个偶数组成的,为了使答案最大,当奇数的个数和偶数的个数确定时,我们取最大的若干个。将奇数取出来降序排序,将偶数取出来降序排序,倘若我们此时选择了p1的奇数,p2的偶数 若要增加奇数的个数,减少偶数的个数,就将p1+=2,p2-=2(维护总数奇数的性质),反复操作时候原创 2017-01-25 22:11:38 · 451 阅读 · 2 评论 -
[BZOJ4416][Shoi2013]阶乘字符串 状态压缩dp
诶一直感觉这个数字特别大的时候会无解 然而一直没有把这个数算出来,觉得可能是大于一个数无解小于一个数暴力 然而看题解发现这个数字是2121正解先特判nn是否大于2121,若大于puts no 否则进行状态压缩dp,F[mask]F[mask]表示最短的前缀,能满足以mask为字符集合的阶乘字符串 若F[mask]<=mF[mask] <= m有解否则无解/******************原创 2017-02-12 13:12:42 · 496 阅读 · 0 评论 -
[BZOJ4326]JOIOJI 查分+排序
看到别人做好奇点进去,随便写了没想到居然过了 没标题,实在不知道这个解法叫啥 统计前i位’J’的个数x,’O’的个数y,’I’的个数z 两两差分得到二元组#include <iostream>#include <cstdio>#include <algorithm>#define N 1000050using namespace std;struct sn{ int a,b,_; }Q[原创 2017-02-27 19:02:55 · 471 阅读 · 0 评论 -
Codeforces 241D : Numbers
【大意】 给定一个1到n的排列a和一个素数p,构造一个子序列,使得元素异或和为0且首尾相接形成的大整数是p的倍数。n,p≤\leq50000。 【解答】 做法是把原数列中小于32的数拿出来构造这个序列,无视掉序列中大于等于32的数小于等于 32的数中,异或和为0的组合有(312)4(\frac{31}{2})^4种 当p不为2或者5时,首尾相接拼起来模p为0可以看做是一个随机函数,答案出现的原创 2017-06-16 21:20:54 · 626 阅读 · 0 评论