思维题
SSL_LHNB
Violence Works Wonders
展开
-
Wannafly挑战赛15 E 小W的斜率
他在二维平面上撒下了n个点,这些点相互不同,但一番观察之后,他失望的发现并没有任何两个点连成的直线的斜率是P/Q。因此将所有原坐标系中的点按x’坐标(分母为定值,所以仅需排x*P-y*Q)排序,比较相邻两点在原坐标系中的斜率是否最接近P/Q即可。对于100%的数据:5原创 2022-10-13 16:29:59 · 230 阅读 · 0 评论 -
来自学长的快乐AK题——Day9 快速失败
快速失败——博弈论(Nim游戏) Description 数据规模 思路 首先,考虑先后手开始时的策略。先手可以随便取,而后手显然不能取与先手取的石子同行同列的石子。 那么博弈开始后,剩下的石头里与开始时取走的石头同行同列的石子一定不能取完,最少只能取到1。换言之,这些石子相当于只有ai,j-1个。那么对于剩下的七个格子里的石子,就是一个经典的Nim游戏了。 Nim游戏的博弈原创 2021-12-18 16:51:57 · 2301 阅读 · 0 评论 -
来自学长的快乐AK题——Day8 洛谷月赛
我们就同时向最大值的左右两边递归(前提是那一边有最大值为关键点的区间),比较这个点是连同左边的l~p-1的区间被合并更优,还是连同右边的p+1~r的区间被合并更优(因为在该节点前被划分的区间肯定有比当前节点更大的最大值,因此无需考虑谁大谁小)。如果不是,设当前递归到的区间为l~r,当前区间的最大值下标为p,那么当前这个最大值连同l~p-1或p+1~r其中的某个区间就必须被合并到另一个最大值为关键点的区间(否则当前区间l~r的最大值就不是一个关键点)。然后我们称d的倍数的位置为关键点。原创 2021-08-25 15:38:59 · 135 阅读 · 0 评论 -
来自学长的快乐AK题——Day7 A
A——子序列自动机 Description 给出长度为n的字符串S,以及Q个询问 每个询问给出一个字符串T,判断T是否为S的一个子序列 所有串仅包含小写字母 输入 第一行给出正整数n,Q 第二行给出S 接下来Q行,每行给出一个询问T 输出 对于每个询问输出一行表示答案,符合输出YES,不符输出NO 数据规模 思路 水题一道。 扣教练题解: 设f[i,j]表示位置i以后字符j第一次出现的位置 然后预处理所有的f[i,j] 然后每次询问直接暴力跳即可 时间复杂度O(26n+q|T|) 不过我用的是vect原创 2021-08-23 20:29:44 · 117 阅读 · 0 评论 -
来自学长的快乐AK题——Day6 D
D——蜜汁做法 Description 输入 输出 数据规模 思路 (扣自教练高质量题解) 代码 #include<iostream> #include<cstdio> #include<algorithm> #include<vector> using namespace std; const int N=1e6,lim=50; int n,m,cnt,ne[N],a[N]; bool f,over[N]; string s; vector <原创 2021-08-21 17:05:01 · 71 阅读 · 0 评论 -
来自学长的快乐AK题——Day6 A
A——蜜汁数论 Description 给出多组n,m,求C(n,m)的奇偶性。 输入 输出 数据规模 思路 我看不懂题解的思路,但我有更骚的思路。 设sum[i]记录i!i!i!中质因子2的个数。 由于n,m最大到1e7,我们就可以进行预处理,像前缀和一样递推出所有sum[i](1≤i≤n1\leq i \leq n1≤i≤n)。 对于一个C(n,m),将其化简为(m+1)∗(m+2)∗...∗n(n−m)!\frac{(m+1)*(m+2)*...*n}{(n-m)!}(n−m)!(m+1)∗(原创 2021-08-18 10:38:13 · 70 阅读 · 0 评论 -
来自学长的快乐AK题——Day5 C
C—— Description 一棵树删去任意条边,可以得到若干棵新树。 若使让每棵新树的节点数相同。问有多少种方法分割这棵树。 设给出的树的结点数为n,并给出n-1条边 输入 第一行一个正整数N,表示这棵树的结点总数。 接下来N-1行,每行两个数字X,Y表示编号为X的结点与编号为Y的结点相连。结点编号的范围为[1,N]。 输出 一个整数,表示方案数。注意,不砍去任何一条边也算作一种方案。 数据规模 对于40%的数据,N ≤ 15 对于60%的数据,N ≤ 10^5 对于100%的数据,N ≤ 10^6 数原创 2021-08-18 07:51:05 · 91 阅读 · 0 评论 -
来自学长的快乐AK题——Day1 C
C——模拟+维护中位数 Description 给出一个长度为n的排列ai以及seed,求 ans=2∗∑l=1n∑r=lnseed(l−1)∗n+rmid(l,r)ans=2*\sum _{l=1}^n \sum _{r=l}^n seed^{(l-1)*n+r}mid(l,r)ans=2∗l=1∑nr=l∑nseed(l−1)∗n+rmid(l,r) 结果对1000000007取模。 mid(l,r)指al,al+1,…,ar-1,ar 的中位数。 思路 a是一个全排列,n<=10^4 如果进原创 2021-08-16 15:47:44 · 132 阅读 · 0 评论 -
来自学长的快乐AK题——Day1 B
B——蜜汁做法 Description 思路 对于一个矩阵, 左上角为[x1,y1],右下角为[x2,y2] 它的权值计算为 ax1*(by1+…+by2) + … ax2*(by1+…+by2) 即(ax1+…+ax2)*(by1+…+by2) 发现x跟y没有必然的关系 可以分开处理 枚举a的可能区间[x1,x2],预处理所有的by区间和 对于一个限制[L,R] 若x选定为[x1,x2],则(L/suma[x1,x2],R/suma[x1,x2]) 为by区间和可以选择的范围(注意考虑小数取整) 对于原创 2021-08-16 15:47:13 · 73 阅读 · 0 评论 -
来自学长的快乐AK题——Day2 D
D——差分。。。之类的东东 Description 题面有误,应该为子串长度。(否则这题就sb到爆了) 思路 考虑差分的思想,为男生则赋值+1,为女生则赋值-1,做前缀和。 倘若一段区间i~j内男女个数相等,则该区间的所有值之和显然等于0(因为个数相等的+1和-1互相抵消了)。 用前缀和来表示,即s[j]-s[i-1]=0。简单移项可以得到s[j]=s[i-1]。 也就是说,如果s[j]=s[i],那么i+1~j就是一个男女人数相等的区间。用桶记录之前出现过的最早的s数组值的位置(因为要求最大),倘若之后原创 2021-08-13 08:04:40 · 60 阅读 · 0 评论 -
来自学长的快乐AK题——Day2 A
A——蜜汁做法 Description n个小球排成一列,第i个小球颜色为ai 定义小球i与j的距离为|(i-j)*(ai-aj)| 求所有小球间距离之和 i与j 和 j与i 不必重复计算 100%:n<=1000000,0<=ai<=1 思路 由条件容易得到:只有当ai-aj不为0,即ai和aj不相等时,距离才不为0。也就是说,只有ai与aj不相等的两个小球才能产生贡献。 观察数据范围,很容易发现一个突破口:ai不是0就是1。那么对于一个0色球来说,只有1色球能与它产生贡献,1色球同理。原创 2021-08-13 08:00:32 · 90 阅读 · 0 评论 -
来自学长的快乐AK题——Day3 B
B——暴力出奇迹 Description 一个序列S,如果S是回文的且分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共回文子序列。 给一个长度为n的字符串a和一个长度为m的字符串b,求a和b的最长公共回文子序列的长度。 对于100%的数据,满足1≤n≤100000,1≤m≤20,字符串只包含小写字母。 思路 直接暴力好吧,dfs枚举字符串b的子序列(因为它好欺负,长度只有20),如果子序列是回文的,再拿到a串中匹配。 代码 #include<iostre原创 2021-08-12 21:21:10 · 92 阅读 · 0 评论