题目描述 在麦克雷的面前有N个数,以及一个R*C的矩阵.现在他的任务是从N个数中取出R*C个,并填入这个矩阵中.矩阵每一行的法值为本行最大值与最小值的差,而整个矩阵的法值为每一行的法值的最大值.现在,麦克雷想知道矩阵的最小法值是多少. 输入 输入共两行. 第一行是三个整数:n,r,c. 第二行是 n 个整数 Pi. 输出 输出一个整数,即满足条件的最小的法值. 样例输入 7 2 3 170 205 225 190 260 225 160 样例输出 30 数据范围 30%:1<=n,r,c<=1…
题目链接: 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家的第一层,…
题目描述 在麦克雷的面前出现了一个有n*m个格子的矩阵,每个格子用"."或"#"表示,"."表示这个格子可以放东西,"#"则表示这个格子不能放东西.现在他拿着一条1*2大小的木棒,好奇的他想知道对于一些子矩阵,有多少种放木棒的方案. 输入 第一行包含 2 个正整数 n,m. 接下来 n 行每行包含 m 个字符"."或"#". 第n+1行包含1个正整数q,表示询问次数. 接下来q行每行包含…
题目描述 麦克雷有一个1~n的排列,他想知道对于一些区间,有多少对区间内的数(x,y),满足x能被y整除. 输入 第一行包含2个正整数n,m.表示有n个数,m个询问. 接下来一行包含n个正整数,表示麦克雷有的数列. 接下来m行每行包含2个正整数l,r.表示询问区间[l,r]. 输出 共 m 行,每行一个整数,表示满足条件的对数. 样例输入 10 9 1 2 3 4 5 6 7 8 9 10 1 10 2 9 3 8 4 7 5 6 2 2 9 10 5 10 4 10 样例输出 27 14 8…
题目描述 输入 输出 样例输入 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…
题目 分析 设表示每一行的状态,用一个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…
4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms  Memory Limits: 262144 KB  Detailed Limits   Goto ProblemSet Description…
题目 分析 比赛上,没有注意到询问只询问光标前面,于是只打了个暴力. 因为询问只询问光标前面,首先,当光标向后每移动到一个位置,顺便将这个位置的前缀和,和最大前缀和求出来. 总之,模拟 #include <cmath> #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; const int maxlongi…
第一题纯模拟,结果那个出题人脑子似乎进水了,空间限制开了1G!!! 导致我捉摸了半天为什么空间要开那么大,最后只能得出上面的结论. 第二题是个矩阵快速幂,比赛上我没把递推式求出来,但是根据各种乱搞,得出了个\(O(n)\)的式子.水到了70分.嘿嘿! 第三题我在最后50分钟才想到,细节特别多,结果没调出来. 后来还调了整个下午.唉,好坑爹. 总结 1.不要太在意脑子进水的出题人开的限制.…
题目描述 输入 输出 样例输入 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…
题目描述 输入 第一行包括两个正整数,N ,M ,分别表示线段树的宽以及询问次数. 以下N-1 行以先序遍历(dfs深搜顺序)描述一个小R线段树,每行一个正整数表示当前非叶子节点的 mid,保证每个节点L<=mid<=r . (因为叶子节点不需要mid ,所以在读入时走到叶子节点时回溯即可,所以共N-1 个mid ,而且保证1~N-1 各出现一次) 而后M 行每行包括两个正整数,L,r(1<=L<=r<=N) 描述一个要求区间定位的区间. 输出 M行每行包括一个正整数,表示给…
题目描述 相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和.走的规则是:(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. 代码 #…
题目描述 输入 一行,两个整数l,r . 输出 一行,一个整数,表示第l 天到第r 天的愉悦值的和. 样例输入 64 89 样例输出 1818 数据范围 解法 可以参考数位动态规划的想法. 从个位开始,逐位把特殊值变为一般值. 然后分类讨论即可. 代码 #include<iostream> #include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #defi…
题目链接: http://172.16.0.132/senior/#main/show/4668 题目: 题解: 考虑把A数组里的每个元素分解质因数,对于每个质因数开一个vector存一下包含这个质因数的元素对应的这个质因数的指数 我们可以枚举质因数分别处理.为什么时间复杂度是对的呢?因为对于任何一个元素质因数种类是不会很多的,而对于每个质因数我们仅考虑包含它的数而不是全部扫一遍,因而是对的 枚举质因数之后,我们得到它对应的指数序列.对于小于等于根号1e7的质因数,考虑把这个指数序列从小到大,对…
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…
题目 分析 虽然我们很难求出\(\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,所以剩下的位置可以…
题目 分析 这题可以递推, 但是\(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.贪心,最后还是失败了. 正解是类似于粉刷栅栏的神奇贪心.…
这套题不算难但是比赛上萎掉了. 第一题数论, 当找到一个合适的数就直接处理答案,再用筛法将处理过的删掉. 比赛上没想到筛法,只拿了70分. 第二题二分答案,然后验证合法性就可以. 但是由于不能二分小数,所以把所以的答案记录下来排个序,再二分. 比赛上,脑子一片空白,几乎全在想第一题,就没有去想. 第三题tarjan缩点+lca,我在最后30分钟才开始打,没有跳出来. 总结 1.计划好时间,在一道题上面不要浪费太多时间.…
题目 分析 题目要求第i种颜色的最后一个珠子要在第i+1种颜色的最后一个珠子之前, 那么我们从小到大枚举做到第i种,把第i种的最后一颗珠子取出,将剩下的\(num(i)-1\)个珠子插入已排好的前i-1种中,再将取出的珠子放在最后一个. 每次求出将剩下的\(num(i)-1\)个珠子插入已排好的前i-1种中的方案数,将它乘以ans. 对于每个i的方案数可以用隔板问题来求. 但是,在比赛上,我忘了隔板问题,于是再枚举个j,将已经排好的珠子分成j份,将要放进去的的\(num(i)-1\)个珠子找出j…
题目 分析 发现,当原图是一棵树的时候,那么新建一条边后,就会变成环套树, 而环内的所有点对都是安全点对,如果环中有k个点,答案就是\(k(k-1)\) 联想到,当把原图做一遍tarjan缩点,每个环缩成一个点,点权为环中的点数,然后就变成了一棵树,那么新建一条边后,就会变成环套树, 经过计算,增加的点对数就是点权和的平方减去点权的平方和 至于如何求出点权和的平方以及点权的平方和,对于每个询问(x,y) 答案就是x到y的路径上的点权和的平方以及点权的平方和,用lca来做, 如果手贱,可以打树链剖…
题目 分析 考虑二分答案, 二分小数显然是不可取的,那么我们将所有可能的答案求出来,记录在一个数组上,排个序(C++调用函数很容易超时,手打快排,时间复杂度约为\(O(>8*10^7)\),但相信梦想的力量). 剩下就简单了,将二分出的值判断是否可以获得k分以上, 这里可以用多种方法,spfa.dp dp: \(dp_i\)表示移动到了第i个点的最大分数 #include <cmath> #include <iostream> #include <cstdio>…