题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)<=a-b.a xor b>=a-b 那么gcd(a,b)=a xor b=a-b gcd(a, a xor c)=c,而c是a的约数 设a-b=c,我们枚举它 a=i*c. 那么就只用判断a xor c=a-c即可. #include <cmath> #include <iostr…
第一题又有gcd,又有xor,本来想直接弃疗,不过后来想到了个水法: 当两个相邻的数满足条件时,那么他们的倍数也可能满足条件.然后没打,只打了个暴力. 正解就是各种结论,各种定理搞搞. 第二题,想都不用想点分治,事实中我点分治的方法,菊花图过不了, 但是!!!我在算菊花图的复杂度时,把\(O(n^2)\)神奇的算成了\(O(n)\),于是自信满满的打了点分治,水过了. 第三题分配问题,一开始考虑背包,失败.接着考虑考虑贪心,失败.弃疗...结束后,题解费用流,我伙呆. 总结 1.想到水法就打,总…
题目 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和). 分析 点分治,设当前为x的,求在以x为根的子树中,经过x的路径(包括起点或终点在x)中长度大于等于S的最小值. 假设i有3个儿子,j.k.l, 首先将以j为根的子树中的所有点到x的距离求出来,放进队列中.排个序. 接着将以k为根的子树中的所有点到x的距离求出来,一个一个点枚举,在队列中二分,求出一段大于等于S并且最小的路径,与ans比较,取小.再将它们放进队列中.排个序. 再以j为…
题目链接: http://172.16.0.132/senior/#main/show/4668 题目: 题解: 考虑把A数组里的每个元素分解质因数,对于每个质因数开一个vector存一下包含这个质因数的元素对应的这个质因数的指数 我们可以枚举质因数分别处理.为什么时间复杂度是对的呢?因为对于任何一个元素质因数种类是不会很多的,而对于每个质因数我们仅考虑包含它的数而不是全部扫一遍,因而是对的 枚举质因数之后,我们得到它对应的指数序列.对于小于等于根号1e7的质因数,考虑把这个指数序列从小到大,对…
题目描述 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和) 输入 第一行给出N,S,E.N代表树的点数,S,E如题目描述. 下面N-1行给出这棵树的相邻两个节点的边及其权值W. 输出 输出共一行一个整数,表示答案.若无解输出-1. 样例输入 5 10 40 2 4 80 2 3 57 1 2 16 2 5 49 样例输出 16 样例解释 1到2的路径即为答案. 数据范围 对于20%的数据满足n<=300 对于50%的数据满足n<…
4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms  Memory Limits: 262144 KB  Detailed Limits   Goto ProblemSet Description…
考的还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^{…
题目 分析 比赛上,没有注意到询问只询问光标前面,于是只打了个暴力. 因为询问只询问光标前面,首先,当光标向后每移动到一个位置,顺便将这个位置的前缀和,和最大前缀和求出来. 总之,模拟 #include <cmath> #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; const int maxlongi…
第一题纯模拟,结果那个出题人脑子似乎进水了,空间限制开了1G!!! 导致我捉摸了半天为什么空间要开那么大,最后只能得出上面的结论. 第二题是个矩阵快速幂,比赛上我没把递推式求出来,但是根据各种乱搞,得出了个\(O(n)\)的式子.水到了70分.嘿嘿! 第三题我在最后50分钟才想到,细节特别多,结果没调出来. 后来还调了整个下午.唉,好坑爹. 总结 1.不要太在意脑子进水的出题人开的限制.…
题目 分析 虽然我们很难求出\(\sum_{i=n}^mjoy(i)\), 但是我们可以分别求出\(\sum_{i=1}^mjoy(i)\)和\(\sum_{i=1}^{n-1}joy(i)\),相减就可以了. 如果我们要求\(\sum_{i=1}^xjoy(i)\) 设x的长度为len, 接着枚举i,求出所有i位数的贡献. 分两种情况: 当len>i 接着我们枚举一个位置j, k为他的相对位置, 再枚举j和k这两个位置分别取什么数,设分别取p和q. 因为这个i位数一定小于x,所以剩下的位置可以…
题目描述 输入 输出 样例输入 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…
题目描述 相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和.走的规则是:(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掉一个…
题目描述 听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影.可是省常中OI队的同学们共有 N(N >= K)人.于是机智的你想到了一个公平公正的方法决定哪K人去看电影. N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出.继续上述操作,直到剩下K个人. 但这样显然太无聊了,于是小S又想出一个牛逼的方法. N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个1 - N的编号,假设随机到的编号是X…
题目描述 输入 输出 样例输入 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. 代码 #…
题目描述 输入 输出 样例输入 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…
题目链接: http://172.16.0.132/senior/#main/show/4722 题目: DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧.Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方便的上楼.经过改造,srwudi的跳楼机可以采用以下四种方式移动:1.向上移动x层:2.向上移动y层:3.向上移动z层:4.回到第一层.一个月黑风高的大中午,DJL来到了srwudi的家,现在他在srwudi家的第一层,…
Description Input Output Sample Input 5 101 12 23 34 45 5 Sample Output 4 Data Constraint Hint 开long long 100分,不开10分也是醉了. long long 卡90分的头一次见. 暴力: 直接O(N^2)不说了. 部分分:x, y坐标递增,设f[i]表示i号点对之前的贡献,那么f[i] = f[i-1] + (abs(x[i] - x[i-1])+ abs(y[i] - y[i-1])) *…
题目 分析 观察这个是式子\(\sum_{d|n}f(n)=n\), 发现其实函数\(f()\)就是欧拉函数\(φ()\)(见http://blog.csdn.net/chen1352/article/details/50695930). 于是,随随便便线筛啦. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring>…
第一题,就是将原有的式子一步步简化,不过有点麻烦,搞了很久. 第二题,枚举上下边界,维护一个单调队列,二分. 比赛上没有想到,只打了个暴力,坑了80分. 第三题,贪心,最后的十多分钟才想到,没有打出来. 心得 1.首先感谢出题人,暴力分好多. 2.但是,比赛期间,我在交头接耳,浪费了很多时间.导致时间不够.…
题目 分析 贪心, 先将怪物按生命值从小到大排序(显然按这个顺序打是最优的) 枚举可以发对少次群体攻击, 首先将所有的群体攻击发出去, 然后一个一个怪物打,当当前怪物生命值大于2,如果还有魔法值就放重击, 其余情况普通攻击. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algori…
题目 分析 枚举两个纵坐标i.j,接着表示枚举区域的上下边界, 设对于每个横坐标区域的前缀和和为\(s_l\),枚举k, 显然当\(s_k>s_l\)时,以(i,k)为左上角,(j,k)为右下角的矩阵一定合法. k从小到大,维护一个单调队列, 显然当\(l1<l2\)时 如果\(s_{l1}<s_{l2}\),l2一定对答案没有贡献,就不将其加入单调队列. 对于一个k,在单调队列中二分,枚举出一个最小的位置,并且\(s_k>s_l\). #include <iostream&…
题目 分析 一步步删掉循环, 首先,原式是\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=i}^n\sum_{l=j}^m\sum_{p=i}^k\sum_{q=j}^l1\] 删掉最后两个循环 \[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=i}^n\sum_{l=j}^m(k-i+1)(l-j+1)\] 发现,当\(i,j\)固定,随着\(k,l\)的变化,\((k-i+1),(l-j+1)\)都是每次减少1 SO, \[\sum_{i=1}^n\su…
题目 分析 这题可以递推, 但是\(O(n)\)还是会超时, 就用矩阵快速幂. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <queue> const long long maxlongint=2147483647; con…
题目 分析 首先用\(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…
这套题不算难但是比赛上萎掉了. 第一题数论, 当找到一个合适的数就直接处理答案,再用筛法将处理过的删掉. 比赛上没想到筛法,只拿了70分. 第二题二分答案,然后验证合法性就可以. 但是由于不能二分小数,所以把所以的答案记录下来排个序,再二分. 比赛上,脑子一片空白,几乎全在想第一题,就没有去想. 第三题tarjan缩点+lca,我在最后30分钟才开始打,没有跳出来. 总结 1.计划好时间,在一道题上面不要浪费太多时间.…