题解【2.23考试T1】div】的更多相关文章

1. div[题目描述] 这是一道传统题,源代码的文件名为 div.cpp/c/pas. 给定一棵树,你要判断是否存在一条边,使得割掉这条边后,这棵树被分成了点数相等的两部分,并且如果存在,请你找到这条边.[输入格式] 从 div.in 中读入. 第一行,一个正整数 n. 接下来 n-1 行描述树的形态,每行两个空格隔开的正整数 u 和 v,表示树中有一条连接 u 号点和 v 号点的边.保证数据合法.[输出格式] 输出到 div.out 中. 仅一行,一个正整数 ans 表示要割掉给出的第 an…
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[尴尬\(.jpg\)] \(T1\)P3322 [SDOI2015]排序 背景 说实话,看见这题正解是dfs的那一刻,我人都傻了[流泪.jpg] 在讲这题的时候赵队@yspm 类比了线段树的思想%%%%%,在食用本篇题解时可以想一下 解题思路 最基本的一个思想:结果与操作的顺序无关,因为在更换的时候…
考试T1CE... 最近不适合考试 T1 扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题.歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海棠,但是如今都已枯萎,只剩下那一株,寄托着对他深深的思念.沿着墙一共有 n 个位置可以种下海棠花,主人公记得自己当年和他一共种下了 m朵,由于花的特性,海棠不能紧挨着种植,也就是两朵海棠花之间最少间隔一个不种花的空位置.但是她记不清当时海棠花具体是怎么摆放的了,所以她想知道一共有多少方案使得 m 朵海棠花都被种下且两两…
3. val[题目描述] 这是一道传统题,源代码的文件名为 val.cpp/c/pas. 有一个值初始为 0,接下来 n 次你可以令其在之前基础上+2 或+1 或-1.你需要保证,这个值在整个过程中达到的最大值减去达到的最小值不大于 k,求方案数,模 1,000,000,007.[输入格式] 从 val.in 中读入. 仅一行,两个空格隔开的正整数 n 和 k.[输出格式] 输出到 val.out 中. 仅一行,一个非负整数,表示方案数对 1,000,000,007 取模后的结果.[输入样例 A…
2. str [题目描述] 这是一道传统题,源代码的文件名为 str.cpp/c/pas. 构造 n 个 01 字符串 S1...Sn,使得对于任意 i≠j,Si 不是 Sj 的前缀.在最小化串长和的前提下,求方案数,模 1,000,000,007. [输入格式] 从 str.in 中读入. 仅一行,一个不小于 2 的正整数 n.[输出格式] 输出到 str.out 中. 仅一行,一个非负整数,表示方案数对 1,000,000,007 取模后的结果.[输入样例 A]3[输出样例 A]12[输入样…
本篇为 Codeforces Round #798 (Div. 2) 也就是 CF1689 的题解,因本人水平比较菜,所以只有前四题 A.Lex String 题目描述 原题面 给定两个字符串 \(a,b\),要求通过以下的两种操作构造一个新的字符串 \(c\),使得 \(c\) 的字典序最小,并且要求不能连续使用某一种操作超过 \(k\) 次 1.从 \(a\) 中任选一个字符插入到 \(c\) 的末尾 2.从 \(b\) 中任选一个字符插入到 \(c\) 的末尾 若某一个字符串为空则认为构造…
\(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned}\sum_{2|i}C_n^i*3^{n-i}\end{aligned}\) 显然如果没有\(\sum\)下面的限制,它就是一个生成函数\((x+3)^n\) 相当于我们只取偶数项 可以用单位根反演 把\(\omega_2^1,\omega_2^2\)分别代入\((x+3)^n\) 得到的就是2倍的…
\(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个人认为xi和yi可能会在机房犇雷(1<=i,xi,yi<=n,xi!=yi) (某个人不可能资磁自己犇雷,即xi,yi!=i) leizi决定找出两个pwang并把他们按在床上揍.leizi希望选择的方案恰好被c个人支持,一个oier会支持一个方案当且仅当至少有一个他认为的pwang被leizi揍…
题目背景 无 题目描述 Alice 和 Bob 在一个圆环上玩游戏.圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n.Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n−1] 内的正整数.游戏开始时会有一个棋子摆在圆环上的某个位置,然后两人轮流 行动.轮到某个人的回合时,他可以从他的集合中选出某个数 x,然后把棋子 沿顺时针方向移动 x 个位置.如果某个人把棋子移动到了 1 号位置,那么他就 获胜了.两个人都会以最优策略行动. 你需要对不同先后手顺序以及棋子初始位置…
题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 一行一个整数表示答案. 样例 Input: 5 3 1 3 4 Output: 11 数据范围与提示 对于前 30% 的数据, n ≤ 9; 对于前 60% 的数据, n ≤ 12; 对于 100% 的数据, 1 ≤ m ≤ n ≤ 15. 我们可以很自然的想到用f[S][s]表示目前选了S中的数…
orz djq_cpp lgm A 题意 给定一个分别含有 \(\frac n2\) 个左括号和右括号的括号序列 每次可以将序列的一个区间翻转 求一个不超过 \(n\) 次的操作方案,使得操作完之后的序列是合法括号序列,并且恰好有 \(k\) 个前缀是合法括号序列 多组数据,所有数据的 \(n\) 之和不超过 \(2000\) 做法:构造 随便生成一个合法的目标序列,如 \(k-1\) 个 () 相接再接上 \(\frac n2-k+1\) 个 ( 和 \(\frac n2-k+1\) 个 )…
T1 数数 解题思路 大概是一个签到题的感觉...(但是 pyt 并没有签上) 第一题当然可以找规律,但是咱们还是老老实实搞正解吧... 先从小到大拍个序,这样可以保证 \(a_l<a_r\) 直接去掉绝对值. 然后就可以推出如下柿子: \[\displaystyle\sum_{l=1}^{k}-a_l\times(k-l)+\sum_{r=2}^{k}a_r\times a_r(r-1) \] \[\displaystyle\sum_{i=1}^{k}a_i\times (2\times i-…
传送门 这题暴力对拍都难搞,差评 一般的题解里思路是考虑一般DP: 令\(dp[i][j]\)为枚举到第i位时匹配到第j位的方案数,令\(g[k][j]\)为将匹配到k位的情况补到匹配到j位的方案数 则 \[dp[i][j] = \sum\limits_{k=0}^{m-1}dp[i-1][k]*g[k][j] \] 然后这个式子就是矩阵快速幂的形式了 然而我麻烦亿点的做法: 令\(dp[i]\)为长度为i时的合法方案数,辅助数组\(k[i]\)为锁定前\(m\)位为匹配串唯一一次出现时的方案数…
69. Sqrt(x) 题目 分析,题目实现求一个int数的平方根,最暴力的算法就是逐个遍历,从1开始到x,判断是否有一个数i,其中满足i*i<=x,并且(i+1)*(i+1)>x;这个算法发虽然简单,但是效率不高.其实,按照暴力算法的思想,我们可以联想到在一个已经排好序的数组中查找一个数,该数正好满足上面的条件,因此可以采用二分查找的思想.代码如下: class Solution { public: int mySqrt(int x) { ]={,,,,,,,,,}; ) return a[…
题目传送门:这里是萌萌哒传送门(>,<) 啊♀,据说这题有个完全贪心的做法,但是要维护太多东西好麻烦的(>,<),于是就来口胡一发三分的做法. 思路很简单,假设我指定了一个x,要求通过调整,所有的成绩都最迟在第x天出. 调整到第x天的代价是很容易通过贪心计算出来的啦,复杂度线性. 然后我们考虑从大到小枚举x,每次计算出代价之后更新答案. 再然后我们大胆猜想这是一个单峰函数! 既然都单峰啦那直接三分就好啦(>,<). 实际上我不知道它是不是真的是单峰函数...但是就AC了…
这题好难啊……完全不懂矩阵加速递推的我TAT 这道题目要求我们求出不含不吉利数字的字符串总数,那么我们有dp方程 : dp[i][j](长度为 i 的字符串,最长与不吉利数字前缀相同的后缀长度为 j 的方案数). dp[i][j] = Σdp[i - 1][k] * a[k][j] (a 数组表示从 k 状态转移到 j 状态的方案数).a 数组我们可以通过 kmp 对不吉利数字的每一个前缀后面加上‘0’~‘9’转移匹配得到(匹配成功表示成功转移状态,a[k][j]++;否则表示此时没有重合的后缀…
把lcm写成 (a+n)*(b+n) / gcd(a+n,b+n). 因为gcd可以辗转相减,所以就成了gcd(abs(a-b),a+n),一个常量一个变量之间的gcd,我们可以直接把abs(a-b)的所有约数找出来,然后看a要有某个约数的话n至少是多少,更新答案即可.(因为1e9以下的数的最多的约数的级别是1e3) #include<iostream> #include<cstdio> #include<algorithm> #include<cmath>…
转化一下模型:每天可以选1也可以选0,但是任意前i天(i<=n)1的个数都必须>=0的个数,求总方案数/2^n. 然后可以发现这是一个经典题,随便推一下公式发现等于  C(n,n/2)/2^n  [请在二维平面直角坐标系上自行演算,(x,y)可以到 (x+1,y)和(x,y+1),横坐标代表1的个数,纵坐标代表0的个数,求不经过 y=x+1 这条直线的路径总数  (终点是 任意 (x,y) 满足 x+y==n 且 x>=y)] 本来以为卡卡常数就过去了23333,没想到竟然还要用 阶乘逼…
一开始死磕sam,发现根本没法做...... 后来想了想,反正匹配子串的大部分不是sam就是 二分+hash啊,,,于是就想了想二分+hash,发现好像可以做啊! 就是假设我们要让 s1[1] 映射到s2 中的位置是 s2[i] ,那么这种情况的答案就很好算了,就是求一次lcp之后把第一个不匹配的钦定成匹配之后再一次lcp. 所以总的时间复杂度就是 O(N * log(N)) 啦. #include<iostream> #include<cstdio> #include<cs…
可以很容易的发现,如果选了最高的房子,那么就不能再选了:否则在左边选一坨合法的,在右边选一坨合法的,拼起来还是合法的. 所以我们可以处理出,每个数的控制区间[L,R] (保证这个区间是其他数都小于它的极大区间),以及左边右边最大的比它小的数的位置(在区间里). 这样我们就可以做到类似线段树的分割并合并区间的答案. 但还有一个问题,,,这样建树的话,最高深度可能是O(N)的,这样不就gg了??? 但是数据是随机的啊,,,期望log N.  (好像这种根据权值分割树的数据结构叫笛卡尔树?) #inc…
1.正确答案 [题目描述] 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. “吔,我的答案和你都不一样!”,小Y说道,”我们去找神犇们问答案吧”. 外卡组试卷中共有m道判断题,小H与小Y一共从其他n个神犇那问了答案.之后又从小G那里得知,这n个神犇中有p个考了满分,q个考了零分,其他神犇不为满分或零分.这可让小Y与小H犯了难.你能帮助他们还原出标准答案吗?如有多解则输出字典序最小的那个.无解输出-1. [输入格式] 第一行四个整数n, m, p, q,意义如上描述. 接下…
笔记[问题描述]给定一个长度为m的序列a,下标编号为1~m.序列的每个元素都是1~N的整数.定义序列的代价为累加(1->m-1 abs(ai+1-ai))你现在可以选择两个数x和y,并将序列?中所有的x改成y.x可以与y相等.请求出序列最小可能的代价.[输入格式]输入第一行包含两个整数n和m.第二行包含n个空格分隔的整数,代表序列a.[输出格式]输出一行,包含一个整数,代表序列最小的代价.[样例输入 1]4 61 2 3 4 3 2[样例输出 1]3[样例输入 2]10 59 4 3 8 8[样…
加密[问题描述]有一种不讲道理的加密方法是: 在字符串的任意位置随机插入字符. 相应的,不讲道理的解密方法就是从字符串中恰好删去随机插入的那些字符.给定原文s和加密后的字符串t,求?有多少子串可以通过解密得到原文s.[输入格式]输入第一行包含一个字符串t,第二行包含一个字符串s.[输出格式]输出一行,包含一个整数,代表可以通过解密得到原文的s的子串的数量.[样例输入]abcabcabccba[样例输出]9[样例解释]用[?,?]表示子串开头结尾的下标(从 0 开始编号) ,这 9 种方案是:[0…
设 g(x) = f(x) * x ,多项式 A = Σ g(i) * x^i , 多项式  B = Σ f(i) * x^i. 首先,g(x) = g(x-1) + g(x-2) + f(x-1) + 2f(x-2),所以我们可以得到: A = x * A + x^2 * A + x * B + 2 * x^2 * B + x 又因为B是斐波那契数列的多项式,所以B的闭形式可以直接得到,就是  x/(1-x-x^2)   [这个也不难推,可以自己推推]. 于是我们可以开开心心的解出A的闭形式,…
(数据范围 n<=10^9 ,T<=10 ) 首先,我来证明一下 Σμ(d) * σ(i/d)^2 = σ(i^2) 相信做过约数个数和的童鞋都可以完成从右式推到左式,那么我现在就说一下怎么从左边推到右边. Σμ(d) * σ(i/d)^2 = Σμ(d) * Σ(d|p|i) * Σ(d|q|i) = Σ(p|i) * Σ(q|i) * Σ(d|p,d|q) μ(d) = Σ(p|i) * Σ(q|i) * [gcd(p,q)==1] = σ(i^2) 然后这个题就变成了昨天晚上我做的那个题…
状压dp+矩阵转移,据说正解是dfs出的合法状态,,但难道不是三个for就行了吗2333 #include<iostream> #include<cmath> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> #define ll long long const int ha=1000000007; using namespace std;…
我们把每一行看成一个多项式 f[i][1] + f[i][2] * x + f[i][3] * x^2 + ..... + f[i][n] * x^(n-1) 的话,一行转移到下一行就相当于乘上一个{b*x + a}的多项式. 于是本题就有了不下五种做法233333,但是大部分做法都因为用了多次NTT而被卡常,就算只用了一次NTT的算法过了,那也不是最优的,因为我们完全可以把 (b*x + a)^n 广义二项式展开,这样就可以 O(N) 计算出转移多项式 (因为n<0也适用广义多项式定理,所以多…
题目大意就是: 设f(x)为x各个位数字之和,求x属于[0,k]且b * f(x)^a + c = x的x个数并升序输出. (a<=5  .  b,c,<=10^4  .   k<=10^9) 可以发现f(x)的可能取值(在本题)最多只有81种,并且f(x)确定了之后等号左边就确定了.于是我们可以大力枚举f(x)是多少,解出x之后再看看f(x)是不是等于枚举的值. #include<iostream> #include<cstring> #include<a…
问题 B: NOIP2015 斗地主 时间限制: 3 Sec  内存限制: 1024 MB 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4<5<6<7<8<9<10<J<Q<K<A<2<小王<大王,而花色并不对牌的大小产生影响.每一局游戏中,一副手牌由n张牌组成.游戏者每次可以根据规…