题目描述 输入 输出 样例输入 4 3 5 4 1 7 3 4 7 4 8 样例输出 59716 数据范围 解法 40%暴力即可: 60%依然暴力: 100%依次计算第一行和第一列对答案的贡献即可: 可以知道f[i][j]对答案的贡献=a^(n-i)*b^(n-j)*C(n-i+n-j,n-j) 然后利用逆元计算组合数,快速幂快速算出答案即可. 代码 #include<iostream> #include<cstdio> #include<cstring> #inclu…
题目描述 输入 输出 样例输入 1 10000 3 10000 5 10000 0 0 样例输出 1 11 95 数据范围 每个测试点数据组数不超过10组 解法 状态压缩动态规划. 设f[i][j]表示第i行状态为j的方案数: f[i][j]=sum(f[i−1][k])(其中j可以从k中转移过来) 预处理出所有转移合法的情况. 然后矩阵乘法优化即可. 代码 #include<iostream> #include<stdio.h> #include<math.h> #i…
题目 分析 首先用\(a_i\)表示达到目标的步数\(B_i-A_i(mod 4)\) 根据粉刷栅栏,先不管mod 4的情况,答案就是\(\sum\max(a_i-a_{i+1},0)\) 那我们刚才做个差分\(a_i-=a_{i+1}\) 当我们给i增加高度, 那么\(a_i-4,a_{i+1}+4\) 当我们给区间增加高度,那么因为中间的+4-4抵消了,所以 \(a_l-4,a_r+4\) 那么我们考虑 \(a_l\)为1.2.3的情况, 就读者私下讨论. #include <cmath>…
第一题,典型的隔板问题, 但是我忘记隔板问题怎么打,一开始在花了1小时,还是没想出来,果断弃疗, 最后的40分钟,我打完了第二题,接着又用了20分钟推敲出一种极其猥琐的式子来代替,可惜预处理的阶乘忘记mod,只拿了40分. 好伤心,60分就这样飞走了(:′⌒`) 第二题很像多米诺骨牌,于是就找规律,找了半天都没有发现, 于是考虑打60分dp,然后转念一想,dp不就是个递推式吗,然后就用矩阵快速幂搞到了100分. 第三题有点坑爹,考虑了dp.贪心,最后还是失败了. 正解是类似于粉刷栅栏的神奇贪心.…
题目 分析 设表示每一行的状态,用一个4位的二进制来表示,当前这一行中的每一个位数对下一位有没有影响. 设\(f_{i,s}\)表示,做完了的i行,其状态为s,的方案数. 两个状态之间是否可以转移就留给读者自己思考了. 答案就是\(f_{n,0}\)因为最后一行对下一行不能造成影响. 然而,这样只有60分. 100分是个矩阵快速幂, B矩阵构造很简单,当两个状态\(s.s'\)可以转移,那么,B矩阵\(g_{s,s'}=1\). 当i等于零时, A矩阵为{1, 0 \(<\)repeats 15…
题目 分析 题目要求第i种颜色的最后一个珠子要在第i+1种颜色的最后一个珠子之前, 那么我们从小到大枚举做到第i种,把第i种的最后一颗珠子取出,将剩下的\(num(i)-1\)个珠子插入已排好的前i-1种中,再将取出的珠子放在最后一个. 每次求出将剩下的\(num(i)-1\)个珠子插入已排好的前i-1种中的方案数,将它乘以ans. 对于每个i的方案数可以用隔板问题来求. 但是,在比赛上,我忘了隔板问题,于是再枚举个j,将已经排好的珠子分成j份,将要放进去的的\(num(i)-1\)个珠子找出j…
考的还ok,暴力分很多,但有点意外的错误. 第一题找规律的题目,推了好久.100分 第二题dp,没想到. 第三题树状数组.比赛上打了个分段,准备拿60分,因为时间不够,没有对拍,其中有分段的20分莫名其妙的没有了. 总结 1.控制好时间,合理分配.…
题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以了. 细节很多,注意处理. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algor…
题目 分析 易证,最优的答案一定是按\(w_i\)从小到大放. 我们考虑dp, 先将w从小到大排个序,再设\(f_{i,j}\)表示当前做到第i个物品,已选择了j个物品的最大值.转移就是\[f_{i,j}=max\left\{\begin{array}\\f_{i-1,j}\\f_{i-1,j-1}+v_i-w_i*(共选多少个物品(这个要枚举)-j)\end{array}\right.\] 但显然这是\(O(n^3)\)的. 我们考虑如何不用枚举共选多少个物品, 我们考虑反过来做,将w从大到小…
题目 分析 假设,我们从\(F_{i,2}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-i}b^{n-1}r_i\): 同理,如果从\(F_{2,i}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-1}b^{n-i}l_i\). 那么某个系数是什么呢? 感性理解一下,就是从出发点到(n,n)的方案数\(C_{2*n-i-2}^{n-i}\). 那么答案就是\[\sum_{i-2}^{n}C_{2*n-i-2}^{n-i}(a^{n-1}b^{…
题目 Bob和Alice出去度蜜月,但Alice不慎走失,Bob在伤心过后,决定前去寻找Alice. 他们度蜜月的地方是一棵树,共有N个节点,Bob会使用下列DFS算法对该树进行遍历. starting_time是一个容量为n的数组 current_time = 0 dfs(v): current_time = current_time + 1 starting_time[v] = current_time 将children[v]的顺序随机排列 (每个排列的概率相同) // children[…
题目 403机房最近决定举行一场锦标赛.锦标赛共有N个人参加,共进行N-1轮.第一轮随机挑选两名选手进行决斗,胜者进入下一轮的比赛,第二轮到第N-1轮再每轮随机挑选1名选手与上一轮胜利的选手决斗,最后只剩一轮选手.第i名选手与第j名选手决斗,第i名选手胜利的概率是a[i][j]. 作为一号选手的富榄想知道如何安排每轮出场的选手可以使得他获胜的概率最大,并求出这个最大概率. 分析 设\(f[i][j]\)表示剩下的人集合为j,当前胜者为i,我们在向后一轮转移时发现有胜败两种情况,从前向后转会转移入…
题目 描述 题目大意 一个序列,每次可以使一段区间内的所有数加一(模四). 问最少的操作次数. 思考历程 一看这题目,诶,这不就是那道叫密码锁的题目吗? 然后随便打一打,样例过了,就再也没有思考这一题. 正解 其实我的想法完全错了. 因为这题只能加,不能减啊! 于是就得考虑另一个方法. 题目可以转成这样的问题:给你一个数列,你可以预先给其中的数加四,然后每次对一个区间进行减一操作,问最少的操作数. 显然,如果已经加四了,就是一道大水题(好像叫--粉刷栅栏)? 我们先不考虑加四,那么答案就是∑ma…
题目 描述 题目大意 有nnn个人,你要确定一个出场序列.每次新上台的人就会和擂主打一架,胜利的人继续当擂主.题目给出两两之间打架胜利(失败)的概率. 问111选手坚持到最后的最大概率. 思考历程 看这数据范围这么小,立即想到状压DP! 自然而然地想到状态:设fs,if_{s,i}fs,i​表示上了台的人的状态为sss,当前擂主为iii的最大概率. 于是我很快就发现了这个方法的bug.每次转移都会有输或硬两种状态,但万一它们以后要合并到一起呢? 假设状态AAA转移到状态BBB和CCC,接下来状态…
题目 描述 题目大意 给你一堆小串,每个小串都有一定的分数. 让你构造一个字符串,若子串中出现了之前的小串,就可以得到对应的分数(可以重复) 问最大分数. 思考历程 一看这题就知道是什么字符串方面的算法. 然后就很自然地想到AC自动机,多串匹配嘛! 接下来就想到建字符串的过程中,一个指针在AC自动机上跳来跳去-- 先建出AC自动机,然后算出到达每个节点的贡献. 对于每个节点,枚举字母,若没有出边,就想着用failfailfail往上跳,然后将出边连向那个地方. 从此AC自动机变成了一张有向图,每…
题目描述 输入 输出 样例输入 6 6 8 9 1 13 9 3 1 4 5 2 6 9 1 3 7 2 7 7 1 6 1 2 11 13 样例输出 45 19 21 数据范围 解法 40%暴力即可: 60%分段暴力,对于20%的数据,由于没有x,所以y二进制下,每有一个1,就计算对应位置有多少1就可以了. 100%基于60%的想法,如果y&(1 shl (i-1))有值(y在二进制下的第i位是1),那么就相当于有多少个a在mod(1 shl i)意义下,在[1 shl (i-1)..(1 s…
题目描述 输入 输出 样例输入 5 8 2 10 7 5 1 11 8 13 3 样例输出 27 数据范围 解法 选定一些物品a[1],a[2],a[3]-a[num],尝试交换a[i],a[j],那么对答案的贡献是: -(v[i]-xsum)-(v[j]-w[i]-xsum)+(v[j]-xsum)+(v[i]-w[j]-xsum) (xsum为sigma(w[1..i-1])): 整理后可得+w[i]-w[j],所以说如果w[i]>w[j],那么我们交换a[i],a[j]是对答案有积极贡献的…
题目描述 输入 输出 样例输入 1 5 2 1 3 0 3 2 2 0 1 0 样例输出 1 数据范围 解法 考虑没有模的情况,问题就仅仅只是简单的差分问题(广告铺设): 设r[i]是第i位需要加的次数,令q[i]=r[i+1]−r[i]: 则ans=sigma{max(q[i],0)}. 回到原问题: 现在先求出每一位至少需要加多少次才能从a数组->b数组,得出r数组,继而得出初始的q数组. 考虑模带来的影响是可以调整q数组使得获得更少的代价: 具体如是:设给r数组的一个区间[l,r]全体+4…
题目描述 输入 输出 样例输入 3 2 2 1 样例输出 3 数据范围 样例解释 解法 先假定每种颜色的珠子取一个按顺序排列. 设这n个珠子就是每一种颜色的珠子的最后一个. 考虑逐个把珠子放入. 对于第i种颜色的珠子,计算有多少种摆放方式: 显然这种颜色最后的珠子前要放sum[i]-1个珠子,然后已放的有sum[i-1]个. 计算已放的珠子的位置有多少种方案,就等价于第i种珠子的摆放方案: 也即C(sum[i−1],sum[i]−1). 把所有颜色珠子的摆放方案乘起来即是答案. 代码 #incl…
4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms  Memory Limits: 262144 KB  Detailed Limits   Goto ProblemSet Description…
[NOIP2017提高A组模拟9.17]信仰是为了虚无之人 Description Input Output Sample Input 3 3 0 1 1 7 1 1 6 1 3 2 Sample Output 1 0 1 7 0 5 Data Constraint 题解 判断真假考虑并查集,设\(g[i]\)表示从当前这棵树的根到\(i\)的前缀异或值,那么对于当前这个区间,\(l-1\)和\(r\)讨论 设\(f1\)是\(l-1\)的根,\(f2\)是\(r\)的根 如果\(f1=f2\)…
[NOIP2017提高A组模拟9.17]猫 题目 Description 信息组最近猫成灾了! 隔壁物理组也拿猫没办法. 信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i-1 只猫,右边是第i+1 只猫.特别的,第1 只猫的左边是第n 只猫,第n 只猫的右边是第1 只猫.每只猫拥有价值,表示消灭它能给信息组组长带来的声誉. 注意,有的猫价值为负数,这意味着消灭它会损害组长的声誉.神刀手可以选择一些猫消灭掉.但是,…
[NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({3},{1,2})三种拆分方法. 小猫想知道,如果给定n,m 和k,对于所有的0<=i<=n,0<=j<=min(i,m),有多少对(i,j),满足S(i,j)是k 的倍数. 注意,0 也是k 的倍数,S(0,0)=1,对于i&…
题目描述 相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和.走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1).如下图是一个数塔,映射到该数塔上行走的规则为:从左上角的点开始,向下走或向右下走直到最底层结束. 1 3 8 2 5 0 1 4 3 8 1 4 2 5 0 路径最大和是1+8+5+4+4 = 22,1+8+5+3+5 = 22或者1+8+0+8+5 = 22. 小S觉得这个问题so easy.于是他提高了点难度,他每次ban掉一个…
题目 分析 比赛上,没有注意到询问只询问光标前面,于是只打了个暴力. 因为询问只询问光标前面,首先,当光标向后每移动到一个位置,顺便将这个位置的前缀和,和最大前缀和求出来. 总之,模拟 #include <cmath> #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; const int maxlongi…
第一题纯模拟,结果那个出题人脑子似乎进水了,空间限制开了1G!!! 导致我捉摸了半天为什么空间要开那么大,最后只能得出上面的结论. 第二题是个矩阵快速幂,比赛上我没把递推式求出来,但是根据各种乱搞,得出了个\(O(n)\)的式子.水到了70分.嘿嘿! 第三题我在最后50分钟才想到,细节特别多,结果没调出来. 后来还调了整个下午.唉,好坑爹. 总结 1.不要太在意脑子进水的出题人开的限制.…
题目描述 雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路.雪之女王赋予了每一座城市不同的能量,其中第i座城市被赋予的能量为Wi. 如果城市u和v之间有一条道路,那么只要此刻雪之女王的能量不小于|Wu-Wv|,这条道路就是安全的.如果城市u和v之间存在两条没有重复道路的安全路径(其中每一段道路都是安全的),则认为这两座城市之间有着良好的贸易关系. 最近,雪之女王因为情感问题,她的能量产生巨大的波动.为了维…
题目描述 听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影.可是省常中OI队的同学们共有 N(N >= K)人.于是机智的你想到了一个公平公正的方法决定哪K人去看电影. N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出.继续上述操作,直到剩下K个人. 但这样显然太无聊了,于是小S又想出一个牛逼的方法. N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个1 - N的编号,假设随机到的编号是X…
题目描述 输入 输出 样例输入 3 8 7 6 3 9 4 1 10 5 输出 18 数据范围 样例解释 解法 容易从n<=15得出可以使用状态压缩动态规划. 设f[i][j][k]表示01状态为i,最后一个放的是第j个积木,最后放的积木按第k种方式来摆放.摆放方式有3种,长 宽.长 高.宽 高. 转移方程显然. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath&g…
题目描述 输入 输出 样例输入 2x^2+3x+1 样例输出 4x+3 数据范围 样例解释 求导的意思: 多项式是由若干个单项式构成的 单项式的一般形式是ax^b,其中ab都是常数,x是自变量 对于单项式ax^b求导,结果就是(ab)x^(b-1) 对于多项式求导,就是把构成它的所有单项式分别求导之后相加 特别地,对于ax^0,即对常数a求导,结果是0 解法 模拟即可: 注意细节: 1.系数可为负: 2.处理+-号 3.当系数为1时,系数省略: 4.特别地:输入2+2x^2,输出2x. 代码 #…