AtCoder Beginner Contest 137 F】的更多相关文章

AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) \[x=i,g(x)=0\] \[x\ne i ,g(x)=1\] 则我们可以构造 \[f(x)=\sum^{i=0}_{P-1}(-a_i*(x-i)^{P-1}+a_i)\] 对于第\(i\)条式子当且仅当\(a_i=1 \ and \ x=i\)时取到\(1\) 代码写的比较奇怪 const…
题目链接:F - Sorting Color Balls (atcoder.jp) 题意: 有n个球,球有颜色和数字.对相邻的两球进行交换时,若颜色不同,需要花费1的代价.求将球排成数字不降的顺序,所需的最小代价. 思路: 将完成排序所需的最小代价记作 cost,将颜色不同的逆序对( i < j && xi > xj && ci ≠ cj )数量记作 cnt ,则有 cost = cnt.证明如下: 可以构造出一种所需花费为 cnt 的排序方案:将这n个球按颜色…
题目传送门:F - Find 4-cycle (atcoder.jp) 题意: 给定一个无向图,其包含了S.T两个独立点集(即S.T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的点之间的边). 求图中包含的一个四元环,若存在则输出环中包含的顶点,否则输出-1. 思路: 首先,四元环只能是由两个S中的点和两个T中的点构成,记为a.b,u.v,且a.b与u.v都直接有边相连. |S| 为 300000,|T| 为 3000.于是我们考虑枚举S中点,记为Si,再枚举与Si相连的两…
题目传送门:F - Operations on a Matrix (atcoder.jp) 题意: 给一个N*M大小的零矩阵,以及Q次操作.操作1(l,r,x):对于 [l,r] 区间内的每列都加上x:操作2(i,x):对于第 i 行,替换为x:操作3(i,j):查询矩阵第 i 行,第 j 列元素的值. N.M.Q大小均为2E5. 思路:树状数组 首先考虑没有操作2的情况,那么很容易地就可以用树状数组实现对列的区间加及单点查询. 当有操作2时,对于操作3的查询:将该行最后一次操作2的行修改值记作…
传送门:F - Keep Connect (atcoder.jp) 题意: 给定长度为N的操作(ti,yi). 给定初值为0的x,对其进行操作:当t为1时,将x替换为y:当t为2时,将x加上y. 最多可以跳过k步,求最终x的最大值. 思路: 注意到,当t为1时,进行替换操作,那么该位置前面的操作是不会对后面产生任何影响的,也就不会消耗k. 那么我们可以枚举最后一次不跳过的1操作,对于该位置的前面无需考虑,对于该位置的后面:所有的1操作都应跳过(记数量为cnt),且对于2操作选择数值前k - cn…
原题链接:F - Cards (atcoder.jp) 题意: 给定N张牌,每张牌正反面各有一个数,所有牌的正面.反面分别构成大小为N的排列P,Q. 求有多少种摆放方式,使得N张牌朝上的数字构成一个1~N的排列. 思路:dp + 并查集 建图:有1~N的顶点,然后Pi跟Qi连一条边. 因为给定的是两个排列,所以每个点的度数为2,因而建出的图必然是由几个独立的环构成. 根据乘法原理,答案就等于每个环的方案数相乘. 求每个环的方案数: 假设环的大小为n(点的数量),dp[n]表示这样的环的方案数:d…
Colorful Tree 思路: 如果强制在线的化可以用树链剖分. 但这道题不强制在线,那么就可以将询问进行差分,最后dfs时再计算每个答案的修改值, 只要维护两个数组就可以了,分别表示根节点到当前节点某个颜色的个数和某个颜色长度和 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1…
[题意]一共有N个任务和M天,一个人一天只能做一个任务,做完任务之后可以在这一天之后的(Ai-1)天拿到Bi的工资,问M天内最多可以拿到多少工资. 链接:https://atcoder.jp/contests/abc137/tasks/abc137_d [思路]按时间将任务排序,把 ii 时刻能做的任务都扔进堆里 , 因为任务是一次性的,所以每个任务放进去过就不再放入了.然后每个时刻看一下堆里面有没有数,有的话就取堆顶出来,而且每个时刻只能取一次.正确性显然. 代码: #include<bits…
前言 又是卡在了T4 , 总分 100 + 200 + 300 = 600pts rank 2449.以后还是要多积累比赛经验. A 输出a+b,a-b,a*b中最大的数,还要多简单?不挂代码了 B 题目描述 数字线上有2000001块石头.这些石头的坐标是- 1000000,- 999999 ,- 999998 ,... ,999999 ,1000000.其中,一些ķ连续的石头涂成黑色,其他石头涂成白色.另外,我们知道坐标X处的石头黑色的.打印所有可能包含黑色石头的坐标,按升序排列. 数据范围…
171 F - Strivore 直接把初始字符当成隔板,统计的方案数会有重复 为了避免重复情况,规定隔板字母尽可能最后出现,即在隔板字母后面不能插入含隔板字母的字符串 所以在隔板字母后插入的字符只有25种选择,而在最前面的位置插入字符有26种选择 枚举在最前面位置插入的字符个数,这些字符有26中选法,剩下的字符插入到隔板字母的后面,有25种选法 剩余字符的插入位置利用隔板法转化为在剩余字符中选择\(m - 1\)块板(第一块板已固定) const int P = 1e9 + 7; const…