摘要:
杭州站。逆袭了。 阅读全文
摘要:
询问 x ~ y 与 p 互素的数字的和是多少。因为询问+修改只有 1000 次,所以可以枚举修改的值。1~n 有多少个数与p互素:将p拆成素因子,容斥定理搞一搞。给出比赛时候的简陋代码。View Code 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<climits> 6 #include<cstdlib> 7 #include<cmath> 8 using namesp 阅读全文
摘要:
今天晚上,队友给我推荐的一道题,觉得还是挺不错的。以前矩阵乘法这些东西接触的不多,自己也没碰到多少。这次这道题目虽然在这方面也不算难。但是感觉至少能将这些简单的熟练掌握了。题目:给你可选择的字符(最多26个小写字母),配成n(n <= 10^9)长度的字符串,不能包含字符串s (len(s) <= 50)。问你有多少种方案。如果 n 很小,必然可以 利用KMP 递推过去。不过n很大,可以推出状态转移的矩阵。然后乘n次就可以了。这里 mat[i][j] 表示 匹配了s的前i个字符 到匹配了s的前j个字符 有多少种方法。当 i = strlen(s) 表示 当前字符之前 已经包含了 s 阅读全文
摘要:
当时比赛时候写了8题后时间不多了,就没继续做下去,不过看了下G题差不多知道怎么做了,不过感觉写起来麻烦。今天早上写了下,果然写的挺麻烦的,至少看起来是。因为有个循环,所以处理起来多要注意下s点上取不取值,以至于扫回来后,碰到s-1(或s+1,根据方向而定,扫到的最后一个点)点方便更新。大致思路:和H题一样,最多一个方向上面只走一次,就是说转弯最多转一次。dp[i][j][k] 前i秒,当前位置状态j(0,1)取不取值,s点状态(0,1),的最大值。正反扫一次,就可以了。代码看起来挺长的,其实一半都是复制粘贴。。。因为正反扫么。View Code 1 #include<cstdio> 阅读全文
摘要:
既然官方没有出题解,这里就说下比赛时候过的几题的题解。A -Magic Number 讨论下 1000/x 的情况就可以了。 B -Battle Ships dp[i][j] 表示 伤了i血,当前伤害为j。dp[i][j] = min(dp[i][j], dp[i-t[k]*(j-l[k])][j-l[k]] + t[k]);当然最后不能只去找 dp[L][j] 。 不造战舰的时间最后累加伤害到L。B 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cst 阅读全文
摘要:
题目说找一个 子矩阵,里面价值最大,其中男生人数 >= b, 女生人数 >= g, 中间不能有不会唱歌的人。这题如果关键在于 排除不会唱歌的人,思想肯定是贪心思想,想人数越多越好,男生女生不过就是在if里面多判定的一句话罢了。为了方便理解,我画张很丑的图...蓝色表示我当前扫到的队员,当然他是会唱歌的。红色表示不会唱歌的队员。白色表示,没选择的队员。我在扫描时,对于每一个点是一行行扫,这样的话,复杂度是 N*M*N。先扫第当前行,也就是第4行,因为第四行上面之前的队员我都会唱歌,那我尽量全部选走。粉色代表这次选择的队员。再上一行,因为有不会唱歌的队员,那我只能放弃第一列之前的所有成 阅读全文
摘要:
题目说要在规定时间内,拿走最大价值。因为房间n <= 10 太小了,所以直接枚举 走过哪几个房间,然后dp 递推下去就可以了dp[i][j] 走过i状态的房间,现在在第j个房间上面花费的最小时间。View Code 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 #define N 12 8 #define M 110 9 #de 阅读全文
摘要:
本场比赛,相对最好做的一题,看出本质,就容易了。问题简化下,比如给你十进制数 s, 问 s! 末尾有几个0。我们一般都是直接找有多少个 2,5。因为2*5 = 10那么 现在是 k进制数 s, 同理,就是找 s! 里面,有多少个因子的能够组成 k,最多组成 ans 个 k, ans 就是答案。这个 自己可以简单证明下。后面好处理。View Code 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmat 阅读全文
摘要:
最近好久没做比赛,加上考试什么的,压力很大。这几天休息,正好抽个空做下浙大月赛。发现自己果然变水了。不过说起来,zju的月赛难度也在上升。这是比赛时候做的第一题,题目是说每次会有 移除x 和 添加x 的操作,问你每次操作后,这串数组的中位数是什么。操作n <= 10000我的想法就是一共出现的数字最多就n个,可以把数据离散掉,然后用线段树,把操作更新掉,可以储存数组现有的数字个数ans。每次查找就查找(ans/2+1)个数字是啥就可以了,如果ans是偶数,再找ans/2个数字,两个相加/2这题目唯一我的疑问就是为啥要LL。。。怎么看数据不会爆啊,可是交了几次都wa了,我就一狠心改了LL交 阅读全文
摘要:
上次比赛比较有趣的一道题目, 就做了这一题...初看不好想,经过分析,就会发现其实就是让你求一个矩阵面积。比如说 我定义 左上 右下就是 来增长 边, 定义 左下右上 来增长 宽, 上左下右 来增长 宽和边。ans = l * hView Code 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <algorithm> 6 using namespace std; 7 typedef __ 阅读全文