10 2018 档案
摘要:题面 T1 思路 乍一看上去似乎是个签到题。然而分数低的可怜。以为小写字母的ASCII码会比100小,开个100的数组足够了。结果忘了'a'就已经是96了。凉凉 题目有一个坑点就是,如果知道了25个字母所对应的字母,那么另外一个也是可以推出来的。 代码 cpp include include inc
阅读全文
摘要:题目链接 思路 这个首先想到质因数分解。然后发现只要对于每个质数将ans乘以这个质数在从1到n中出现过的最高指数次就行了。 这个$10^8$令人发指。一直tle,最后发现吸口氧才能过。。 代码 cpp include include include define fi(s) freopen(s,"r
阅读全文
摘要:题目链接 思路 这个题可以考虑用全部情况减去不合法的情况,来求解。首先需要知道n个点所组成的图总共有$C(_n^2)$种,然后用f[n]表示n个点的图联通的方案数。 然后钦定1在联通图里面,考虑不合法的情况。让j个点联通,其他点可以任意连边,这样就可以保证这张图是不连通的。 所以f数组的转移就是 $
阅读全文
摘要:题面 思路 先假设我们已经知道了操作顺序,考虑如何求出时间。用f[i][j]表示前i个物品,第i个加工完了第j台机器所需要的最少的时间。转移的时候就是f[i][j] = max(f[i 1][j],f[i][j 1] + a[i][j]) a[i][j]表示第i个物品加工第j台机器所需要的时间。 然
阅读全文
摘要:题目链接 思路 这个题和上个题类似,仔细推一下就知道这个题是判断是否是4的倍数 代码 cpp include include define fi(s) freopen(s,"r",stdin); define fo(s) freopen(s,"w",stdout); using namespace
阅读全文
摘要:题目链接 思路 这个题思路挺巧妙的。 情况一: 首先如果这堆石子的数量是1~5,那么肯定是先手赢。因为先手可以直接拿走这些石子。如果石子数量恰好是6,那么肯定是后手赢。因为先手无论怎样拿也无法直接拿走六个石子。 情况二: 考虑继续推广,如果石子数是7~11,那么先手也能赢。因为先手可以先拿成6,然后
阅读全文
摘要:题目链接 思路 首先,因为这是曼哈顿距离,所以很容易就可以将这三个点之间的距离转化为一个矩形,那么这三个点在矩形上的分布只有六种可能。 假设当前矩形的长为n,宽为m。那么可以发现,无论是哪一种情况,这三个点在这个矩形里的摆放方案都是(n 2) ( m 2) 。并且这些摆放方案与这个矩形的位置无关,所
阅读全文
摘要:"题目" T1 "hdu5881" 思路 看到样例和数据范围就明白了些什么。(b a)/2 + 1。但是需要$特判!!!!$ 代码 cpp include include using namespace std; typedef long long ll; ll read() { ll x = 0,
阅读全文
摘要:"题目" T1 思路 直接模拟每一秒发生的变化并且用优先队列优化一下,可以拿到80分。然后发现中间一些时间什么事情都没有干。所以可以直接跳过那些无贡献的时间。时间复杂度为$O(mlogn)$ 代码 cpp include include include include define pi pair
阅读全文
摘要:T1 思路 只要会sort就能a 代码 T3 心路历程 为什么这个题没有思路而是心路历程?~~因为不会啊啊~~ 真的不知道该怎么吐槽这个题了。先是发一个假的大样例,导致改暴力改了1h,然后说重新发样例,结果把第四个数据给发下来了。~~然后我并不知道这是数据~~。然后看见我的暴力re了。还以为要离散化
阅读全文
摘要:"题目" T1 思路 trie,AC自动机,hash都可做。良心出题人 代码 总结 期望得分: 100 + 20 + 100 = 220 实际得分: 100 + 0 + 100 = 200 t1trie的空间算错了RE了一个点。trie的空间是N L L,n是字符串的个数,L是最长字符串的长度。最后
阅读全文
摘要:题目链接 思路 首先可以看出来每个月新增的兔子构成的斐波那契数列。然后每代兔子都可以用斐波那契数列中的一个数来表示。所以对于每只兔子都能在斐波那契数列中找到他所属的一个位置。因为每个兔子都是在两个月之后才开始产下新兔子,所以每个兔子的父亲都是在他所属的斐波那契数前面的前面那一项中。又因为题目中说同一
阅读全文
摘要:题目链接 思路 首先,如果没人说谎那么序列中肯定只有一大一小两种数,假设大的数为x,小的数为y。因为对于每个人只有两种情况,要么自己与除自己外的某个人拥有相同的颜色,此时总颜色数就是这个人所能看到的颜色数量。要么这个人单独拥有一种颜色,此时总颜色数就是这个人所能看到的数量+1。所以x和y相差一定小于
阅读全文
摘要:题目链接 思路 真板子题。割点是指在一个无向图中,删去之后图将不再连通的点。可以用tarjan算法求。根据割点有两种情况,一种是根,一种是非根。如果不是根的就去判断在tarjan的时候当前节点所能到的最靠上的点。如果最靠上的点在当前点的下面,那么当前点就是割点,否则不是。对于是根的点。只要判断是不是
阅读全文
摘要:题目 T1 思路 统计每列有多少个1。如果$sum[0]\geqslant sum[1]$,那么ans的这一位为0,否则为1。 预计得分:100 实际得分:100 代码 T2 20分思路 首先,分析一下题目,其实R和G的数据范围是假的。因为这个题可以转化为将这个序列分为R+G段,其中小于L的段必须大
阅读全文
摘要:题目 思路 这个题目看了很久没有思路,旁边的大(S)佬(B)不到十分钟就秒了。知道正解之后感觉自己太菜了。 首先题目意思就是,要找到两个数,使得这两个数中所有的数码都是对应的。也就是x的数码中如果有1,2,3那么y中也必须有1,2,3对个数不做限制。那么就用一个数来表示一些数码组合。比如说123,那
阅读全文
摘要:题目 思路 全都是位运算,考虑按照二进制拆分进行dp。f[i][j]表示前i个数,二进制的第j位为1的概率。对于为0的概率,直接用(1 f[i][j])即可。 然后就是转移,其实这个题转移蛮好想的,只要一点一点慢慢推就可以了。 竟然用cin读入了100000个double。。。t飞了 PS:注意题目
阅读全文
摘要:题目 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY。若$KEY=\sum\limits_{i=1}^n{[A_i B_i]}$,则密文就是原文的一组合法密码。 现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个
阅读全文
摘要:prufer序列 每个prufer序列对应一棵唯一的树。 生成:得到一棵树的prufer序列的方法是依次去掉编号最小的叶子节点(也就是度数为1的点),然后将这个点的父亲加入队列。直到剩下最后两个点。这样就可以得到一个长度为n的prufer序列。 根据prufer序列的生成方式可以得到:每个节点会在p
阅读全文
摘要:luogu1341 思路 欧拉回路和欧拉路的裸题,首先判断是否存在欧拉路或者欧拉回路。当且仅当途中每个点的度数都为偶数时,存在欧拉回路。当且仅当图中度数为奇数的点的个数为2时,存在欧拉路。如果存在欧拉回路,就可以找一个最小的点开始dfs。如果存在欧拉路,那就只能从度数为奇数的两个点中更小的那个开始d
阅读全文
摘要:题目链接 思路 首先可以通过二分图染色找到奇环和一部分偶环。这个比较简单 但是还有一种偶环容易忽略。 如图(别问我为啥没节点4) 第一次可以找到1 2 3 1)这个奇环,第二次可以找到(3 5 6 3)这个奇环。但是(1 2 3 5 6 3 1)这个偶数环就被忽略了。 再一种情况 如图,我们可以找到
阅读全文
摘要:"bzoj1563" 思路 首先考虑$n^2$的暴力dp,用sum[i]表示前i句话的长度总和。f[i]表示前i句话最小的不协调度之和。转移的时候考虑枚举前面的每个点,找到转移的最优秀的那个点。 然后优化这个暴力。用一个队列存下当前个点之后的点中,哪个区间是从当前点转移更优秀(称为这个点的控制范围)
阅读全文
摘要:luogu3197 思路 看了很久没思路,看了题解发现自己好zz。用全部的情况减去不合法的情况就行了。全部的情况就是每个人随便选,总共有$m^n$种情况,然后考虑不合法的情况,也就是任意相邻的两个人不能信仰同一宗教,第一个人有m个宗教可以选,后面的每个人因为都不能和前面那个人相同,所以后面的每个人有
阅读全文
摘要:luogu1665 思路 一道第二类斯特兰数的模板题。只不过需要写个高精。 f[i][j]表示前i个球放到j个盒子里的方案数。第i个球可以单独一个盒子,所以f[i][j]+=f[i 1][j 1]。还可以与前面的放到同一个盒子里,所以f[i][j]+=f[i 1][j] j 代码
阅读全文
摘要:基础 $C(^n_m)$表示从n个东西中选m个的方案数 $C(^n_m)=\frac{n!}{m!(n-m)!}$ 多项式系数 $(a+b)^n=\sum\limits_{i=0}^n{(^n_i)a^ib^{n-i}}$ 一些知识 $\sum\limits_{i=0}^n(^n_i)=2^n$其实
阅读全文
摘要:"luogu2657" 思路 数位dp,记录下上个位置的数,如果当前的数字与上个数字的差值小于2,就不再转移。还是要注意排除前导0。在记忆化的时候,全都是前导0的情况不能记忆化。 代码 cpp include include include using namespace std; typedef
阅读全文
摘要:"hihocoder1509" 思路 对于每两个数,从二进制的高位到低位考虑,发现,若前面一个的当前位是1,后面一个的当前位置是0,那么s的当前位置必须是1。反之,若前面是0,后面是1,那么s的当前位置必须是0。如果出现矛盾的情况则直接输出0。如果两个数高位已经可以判断出大小了,那么后面的位置随便选
阅读全文
摘要:"hdu6148" 思路 一个数位dp模板题,注意判断前导0。用一个bz来记录当前是应该增还是可增可减。然后排除不满足条件的情况并进行dp即可。 代码 cpp include include include using namespace std; typedef long long ll; con
阅读全文
摘要:"hdu2089" 思路 数位dp模板题。从高位往低位进行搜索,用pos记录当前位置,lst记录上个位置的数字,bz记录上个位置是否是6,limit来记录上个位置是否达到了上界(如果达到了,就需要对当前位置的上界进行处理) 代码
阅读全文
摘要:"luoguU42592" 20分思路 对给出的序列求出前缀和,然后$n^2$暴力枚举即可拿到第一档分 40分思路 对于数列中的数都相同的情况。只需要特判即可。只要特别注意全都是0的情况即可。 100分思路 仔细考虑一下题目意思就可以知道,其实这个题就是求出前缀和之后,对于每个位置上的数,在前面的所
阅读全文
摘要:"luogu2073" 思路 真的不明白洛谷标签的意思。线段树?平衡树?难道这个题不就是用优先队列模拟吗。。。看见标签还以为读错题了 用一个pri数组的下标表示价格,里面存漂亮度。用两个优先队列,分别按升序降序储存价格,然后用两个变量W,C分别表示当前漂亮度和价格就可以模拟了。 注意一个坑点,这个题
阅读全文
摘要:"题目链接" 思路 首先,最优秀的分法一定是每段两端都是这一段中最多的那个,否则可以把不是的那个踢出去单独成段肯定会更优秀。然后就成了将这个序列分段,保证每段两端元素相同的最大收益和。 用a[i]记录第i个位置上的数,用s[i]记录前i个元素中a[i]出现的次数。f[i]表示以前i个数的最大收益。
阅读全文
摘要:"luogu2114" 思路 因为位运算对于每一位是独立的,所以对每一位都对这n个数进行操作,然后观察最后得出的是1还是0。并且保证每一位拼起来之后要比m小。 代码 cpp include include using namespace std; typedef long long ll; cons
阅读全文
摘要:"codevs3342" 思路: 既然是要求最小化最长空题段,直接二分答案。然后就是check函数的写法。 先考虑n方转移,假设当前二分的答案是x,用f[i]表示前i个题,第i道题写的最小花费时间。最后再去判断后f数组的后x个值是否小于等于要求时间的。然后返回。 cpp int check(int
阅读全文
摘要:"luoguU42591" 题意: n个不超过n的正整数中,其中有一个数出现了两次,其余的数都只出现了一次, 求这个出现两次的数。 思路: 这个题的亮点在于内存限制1MB。明显不能再用数组储存了,肯定是用一些运算来求出那个数。假设出现两次的数为x,没有出现的数为y。一开始很容易想到计算出1到n加起来
阅读全文