OI
文章平均质量分 51
扩展的灰
扩展的灰(Extended Ash)
展开
-
Jzoj5408 Dark
LichKing 希望收集邪恶的黑暗力量,并依靠它称霸世界。世间的黑暗力量被描述成一个长度为N 的非负整数序列{Ai},每次它可以选择这个序列中的两个相邻的正整数,让他们的值同时减一并获得一点邪恶力量,直到不存在满足条件的数。然而你不希望他能够得逞,所以你会使得他收集的能量尽可能少。这个题目存在线性的dp,这里先说一种ΣAi的方法我们设f[i][j][0/1]表示现在正在做第i原创 2017-11-06 20:36:30 · 255 阅读 · 0 评论 -
Jzoj5407 Deep
失败的燃烧军团想要逃回深渊,Khadgar 想要追击它们。然而进入深渊的传送门只有一座,燃烧军团和Khadgar 各有一些法力水晶,由Khadgar 先手,双方每次可以作出如下选择:• 使用一个法力水晶,使得传送门的法力等级增加一。• 不用法力水晶,让对方增加等于传送门法力等级的深度,然后将传送门的法力值清零。特别地,若法力水晶数不为零且传送门法力等级为零则不能进行这样的操作。双方原创 2017-11-06 20:29:15 · 248 阅读 · 0 评论 -
Jzoj5409 Fantasy
Y sera 陷入了沉睡,幻境中它梦到一个长度为N 的序列{Ai}。对于这个序列的每一个子串,定义其幻境值为这个子串的和,现在Y sera 希望选择K 个不同的子串并使得这K 个子串的幻境值之和最大。然而由于梦境中的种种限制,这些子串的长度必须在L 到R 之间。你需要告诉她,最大的幻境值之和。对于100% 的数据,有1 此题做法比较神奇,也很好懂,但是很难搞清楚如何去构原创 2017-11-06 20:55:19 · 297 阅读 · 0 评论 -
Jzoj5410 小型耀斑
Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成(k-(该地区到爆炸中心曼哈顿距离))*(该地区的价值)的损失.现在,地灵殿方面想统计一下每颗核弹造成的损失,请你来帮忙计算.哇我十月都在做些什么毒瘤题啊这个题读者可以稍微思考一下再看,因为下面的东西会很难看这个题原创 2017-11-06 21:14:55 · 324 阅读 · 0 评论 -
Jzoj5414 幸运值
校庆志愿者小Z在休息时间和同学们玩卡牌游戏。一共有n张卡牌,每张卡牌上有一个数Ai,每次可以从中选出k张卡牌。一种选取方案的幸运值为这k张卡牌上数的异或和。小Z想知道所有选取方案的幸运值之和除以998244353的余数。为什么中间跳过了几道题?因为现在来不及改了先把过了的搬上来吧套路:按位计算贡献我们考虑,对于32个位置,选择k个异或为1的选法有多少我们记cnt[i]表示第i位为1原创 2017-11-07 07:23:27 · 481 阅读 · 0 评论 -
Jzoj5417 方阵
题目背景 热烈庆祝北京师范大学附属实验中学成立100周年!问题描述 为了准备校庆庆典,学校招募了一些学生组成了一个方阵,准备在庆典上演出。 这个方阵是一个n*m的矩形,第i行第j列有一名学生,他有一个能力值Aij。 校长会定期检查一个p*q的方阵,询问这个方阵的学生能力值之和,或是学生能力值的最大值,或是学生能力值的最小值。由于校长不原创 2017-11-07 07:41:48 · 356 阅读 · 0 评论 -
Jzoj5418 合影
题目背景 热烈庆祝北京师范大学附属实验中学成立100周年!问题描述 经过一天的忙碌,志愿者们结束了他们的工作,准备站在一排合影留念。 现在总共有n名志愿者留下来准备合影。不过,进程并不是那么顺利,有些同学提出了一些奇奇怪怪的要求(每个人最多只会提出一个):他必须站在另外一个同学的左边(不一定相邻),仁慈的老师满足了他们的要求。这时,其中一位来原创 2017-11-07 07:52:09 · 345 阅读 · 0 评论 -
Jzoj5419 筹备计划
题目背景 热烈庆祝北京师范大学附属实验中学成立100周年!问题描述 校庆筹备组的老师们正在寻找合适的地方来举办校庆庆典。 学生们的位置和可以举办庆典的位置在x轴的正半轴取值在[1,n]的整数位置上。 老师们选择的地点是会根据参加典礼的学生位置来决定的,具体来说:定义一个位置的距离和为该位置到所有参加学生的距离之和。如果一个位置的距原创 2017-11-07 08:00:07 · 311 阅读 · 0 评论 -
Jzoj4831 方程式
首先题目有一个条件就是所有的实数解都在[1,20]之间且都是整数所以就枚举一下就好了,问题就是要输出重根,以及重根的次数一个根x是方程f(x)=0的k重重根的充分必要条件就是对于f的0~k-1导数f'都有f'(x)=0,那么我们将这个多项式所有的导函数都求出来枚举一下就好了#include#include#include#define LL long longusing n原创 2017-10-29 18:59:17 · 345 阅读 · 0 评论 -
Jzoj4834 图书列表
这个题废话真多题面好长首先看懂题意大概就做完了,完全就是模拟嘛#include#include#includeusing namespace std;int l[100]={0},w[100]={0},r[100]={0};char s[100][100][200]={0};char c[200]={0}; int n,m=0;bool nc(char cc){ ret原创 2017-10-29 10:23:03 · 299 阅读 · 0 评论 -
Jzoj4791 矩阵
在麦克雷的面前出现了一个有n*m个格子的矩阵,每个格子用“.”或“#”表示,“.”表示这个格子可以放东西,“#”则表示这个格子不能放东西。现在他拿着一条1*2大小的木棒,好奇的他想知道对于一些子矩阵,有多少种放木棒的方案。(不是填满)我们考虑用前缀和的方式求出答案,这里我们假设所有的方案都是有向的,都是向上或者向左我们令s[i][j]表示子矩阵(1,1,i,j)的答案,那么s[i]原创 2017-10-26 20:48:49 · 331 阅读 · 0 评论 -
Jzoj4790 选数问题
在麦克雷的面前有N个数,以及一个R*C的矩阵。现在他的任务是从N个数中取出R*C个,并填入这个矩阵中。矩阵每一行的法值为本行最大值与最小值的差,而整个矩阵的法值为每一行的法值的最大值。现在,麦克雷想知道矩阵的最小法值是多少采用二分+贪心策略我们将r*c个数排序,显然,最优情况每一行必然是序列中一段连续的数字二分可以接受的最大法值那么判定合法的段数有没有r段即可原创 2017-10-26 20:42:23 · 322 阅读 · 0 评论 -
Jzoj4789 货物运输
模型显然就是最短路模型,我们考虑怎么计算距离首先,我们不能从起点开始跑最短路,鉴于此题是无向图,我们可以令dist[T]=p(即终点的距离为目标货运数量)这样就可以从终点开始跑最短路,dist[i]表示从i运送p个钥匙所需要的最小数量现在我们考虑如何计算Dis(u,v)首先计算Dis(u,v)必须先知道dist[u]然后分情况讨论这里假设u是城镇,村庄的话Dis(u,v)=1原创 2017-10-26 20:15:21 · 437 阅读 · 0 评论 -
Jzoj4788 序列
题意:给你a,b两个序列,每次可以在区间[l,r]对每个数加一,求最少的步数使a变成b注意,整个过程都是在mod 4的意义下的,a,b所有元素的值都在[0,3]之间我们可以先考虑不存在Mod 4 的情况我们假设di=max(0,bi-ai)那么显然,对于一个位置i,我们需要将其操作max(0,di)次考虑从1开始,我们设f[i]表示将1~i的d清零所需要的最小次数显然,f[原创 2017-10-26 19:53:41 · 357 阅读 · 0 评论 -
Jzoj4784 Map
这个题意很简单,就是问你连一条边会增加多少双联通点对按照一般的方法,先用Tarjan缩点化为一颗树,每次连起来就在树上找路径统计答案答案的统计方法,设树上节点i(原图的一个双联通块)的大小为v[i]那么一条路径[x,y]的端点被连接起来,贡献应该是(Σv[i])^2-Σv[i]^2,其中i∈x~y的路径这样的话可以用倍增或者树剖求lca来解决码量比较大#pragma G原创 2017-10-25 19:00:49 · 322 阅读 · 0 评论 -
Jzoj4782 Math
若一个数x是平方数,则d(x)为平方数所以就是要考虑有多少对i*j为平方数我们假设,i=p*k^2,那么,j=p*q^2时,i*j为平方数(p不含平方因子,k,q为正整数)所以,我们对于一个p,对应的j就有[√m/p]种我们考虑快速求p对于一个合法的p,我们可以筛掉p*k^2 ,这样时间复杂度是就是线性的#include#include#define N 10000原创 2017-10-24 20:46:42 · 452 阅读 · 0 评论 -
Jzoj4778 数列编辑器
我们发现前四个操作可以用双向链表维护,而最后一个操作有一个限制就是1#include#include#include#define N 1000010using namespace std;int l[N],r[N],s[N]; char c[5];int w[N],f[N]={-129},n=0,m,t,cnt=0;int main(){ freopen("editor.原创 2017-10-24 20:33:52 · 295 阅读 · 0 评论 -
Jzoj4776 排序
给你一个序列,问你能不能只交换2个元素使得它有序解法:扫一遍即可,如果可以,那么逆序对#includeint main(){ int n,a,b,num; scanf("%d%d",&n,&a); b=a; for(int i=2;iscanf("%d",&b); if(b<a) num++; b=a; } if(num1) puts("YES"); else p原创 2017-10-24 20:30:04 · 241 阅读 · 0 评论 -
Jzoj4764 Brothers
在遥远的西方有一个古老的王国,国王将他的王国分成了网格状,每一块称之为一个城市。在国王临死前,他将这些城市分给了自己的N个儿子(编号为0到N-1)。然而这N个王子的关系不是很好,0讨厌1,1讨厌2,2讨厌3……N-1讨厌0。在国王死后,这种不好的关系使得王子之间爆发了战争。战斗只会在相邻的两个城市之间爆发(共有一条边称之为相邻),并且只有当A讨厌B时,A才会对B发起战斗,结果必定是A获得这次战原创 2017-10-24 08:02:37 · 353 阅读 · 0 评论 -
Jzoj4755 快速荷叶叶变换
求ΣΣ(N%i)(M%j)(i我们发现原式就是Σ(N%i)*Σ(M%j),这样分开算可以得到60分考虑化简Σ(N%i)=Σ(N-i*[N/i])=ΣN-Σi*Σ[N/i]=N^2-N*i*Σ[N/i]又因为[N/i]取值只有√N种,可以考虑分段计算,若当前为i则i~[N/[N/i]]的结果是一样的复杂度O(√N+√M)#include#define P 1000000原创 2017-10-23 20:37:52 · 338 阅读 · 0 评论 -
Jzoj4742 单峰
很明显,山峰一定是n那么无论其他的数在n的左边还是右边都对应一种单峰数列ok,答案就是2^(N-1)#include#include#include#define L long long#define M 1000000007using namespace std;L pow(L x,L k){ L S=1; for(;k;x=x*x%M,k>>=1) if(k原创 2017-10-23 18:40:51 · 448 阅读 · 0 评论 -
Jzoj4744 同余
线段树套分块/主席树!我们考虑到ai,p,q比较小(若p较大,则kp+q的数量就比较少,可以暴力枚举若p较小,可以预处理,令g[i][j]表示膜i余j的数的个数我们取这个界为sqrt(maxp)=100将询问放到每个节点上,依次处理处[1,i]的答案最后ans(l,r)=ans(r)-ans(l-1)即可#pragma GCC optimize("O3")#pragm原创 2017-10-23 19:28:56 · 385 阅读 · 0 评论 -
Jzoj4745 看电影
听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影。可是省常中OI队的同学们共有 N(N >= K)人。于是机智的你想到了一个公平公正的方法决定哪K人去看电影。N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出。继续上述操作,直到剩下K个人。但这样显然太无聊了,于是小S又想出一个牛逼的方法。原创 2017-10-23 19:37:55 · 359 阅读 · 0 评论 -
Jzoj4747 被粉碎的线段树
额这个题么有一个很关键的点:结点个数依然为2N-1(证明可以看sam的讲稿)不难发现以下性质:区间定位个数+区间所覆盖的节点个数=2*区间长度所以问题变为,一个区间覆盖了多少个节点?我们可以求出所有的节点,然后这个问题就是一个二维偏序计数问题了具体用离线+按照r排序套上树状数组即可#include#includeusing namespace std;inline原创 2017-10-23 19:48:31 · 401 阅读 · 0 评论 -
Jzoj4822 完美标号
题意:给定M个二元组(A_i, B_i),求X_1, ..., X_N满足:对于任意(A_i, B_i),有|X_{A_i} - X_{B_i}| = 1成立。我们发现,如果有解,那么一定存在一组解只有0,1构成证明:对于一个可行的解X,显然解集Y(Yi=Xi%2)也是这个问题的一个解于是我们将这些二元组连接成一张图,进行一次dfs标号即可,标号时用一条边连接起来的两个点不能同为0或1原创 2017-10-27 21:36:38 · 368 阅读 · 0 评论 -
Jzoj4832 高维宇宙
我们注意到有ai>1,所以,ai+aj为质数当且仅当两者奇偶性不同我们可以以此将这个图变成一个二分图跑匈牙利算法即可(这个题n只有40害得我想了半天状压dp和折半搜索,坑。。。)#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include#include#include#include#define N 100原创 2017-10-29 19:04:24 · 524 阅读 · 0 评论 -
Jzoj1158荒岛野人
正解:同余方程对于每对野人i,j,解方程(p[i]-p[j])=c[j]-c[i](mod Answer) 若在min(l[i],l[j])以内有解则不行(++ANS)否则可以#include#includeusing namespace std;int c[20],p[20],l[20],n,M;int extgcd(int a,int b,int& x,int& y){原创 2017-09-19 18:47:19 · 580 阅读 · 0 评论 -
扩展gcd以及同余方程ax=b(mod M)
关于扩展gcd其实没有必要搞懂,背下来就好了如果不会的自行学习对于方程ax=b(mod M),我们可以将其化简成为ax+My=b,让后用扩展gcd求解当b|r=gcd(a,M)时,方程有r个解,否则无解,对于有解的情况,每个解为用gcd求出的x乘上b/r+k*(M/r)int extgcd(int a,int b,int& x,int& y){ if(b){ int r=extg原创 2017-09-19 18:48:56 · 2041 阅读 · 0 评论 -
Jzoj1306 Sum
先预处理出取模后的前缀和s,那么问题变成min(s[j]-s[i]%P)且s[j]-s[i]%P>=k把s序列反过来作,对于每个数s[i],维护一个set存有s[i]+1~s[……原创 2017-09-19 21:12:53 · 483 阅读 · 0 评论 -
Jzoj1279 解题
过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目.精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场并且象普通人一样找到了工作. 他们的月薪是M (1 他们的题目是一流的难题,所以他们得找帮手.帮手们不是免费的,但是他们能保证在一个月内作出任何题目.每做一道题需要两比付款, 第一笔A_i(1 <= A_i <= M)元在做题原创 2017-09-19 20:51:22 · 409 阅读 · 0 评论 -
Jzoj1277最高的奶牛
给你一个序列s和n个限制,(a,b)表示s[a]这不是裸的差分约束吗哈哈哈哈 诶TLE了怎么破认真观察发现:对于每个限制,要么不相交,要么包含,所以对于一组询问(a,b),将(a,b)内的数全部减掉1即可,可以用前缀和不过记得判重。。。这个很坑#include#includeusing namespace std;set f[10010];int n,m,h,k,s[1原创 2017-09-19 20:38:01 · 429 阅读 · 0 评论 -
Jzoj1164求和
若两个数的最大公约数为1,则这两个数互质。现在给出一个正整数N(1是不是很像欧拉函数呢没错,我们发现,对于i,若有gcd(i,n)=1则必有gcd(n-i,n)=1,所以互质的数是成对出现的!正好,φ(N)也必然是一个偶数所以answer=N*φ(N)/2求φ(N)可以用sqrt(N)的方法,这里不多讲#includeint N,M,K;int main(){ s原创 2017-09-19 19:43:05 · 452 阅读 · 0 评论 -
Jzoj1155 有根树的同构(树的Rabin-Karp)
这里简单说一下rabin-karp其实就是字符串hash算法,不理解的可以自行百度对于一颗树,我们可以将其变为一个括号序列,对这个括号序列作rabin-karp,让后就可以轻松判断同构了是不是很简单细节不多说,有一点必须注意:因为子树是无序的,所以dfs时必须对子树排序#include#include#include#includeusing namespace std;原创 2017-09-19 19:51:46 · 571 阅读 · 0 评论 -
Jzoj1309 最长二重串
给你一个字符串,要你求出最长的至少出现两次的子串这个题呢,很明显是SA啦 是SAM的裸题!帅气简介高大上的SAM出现啦(比难看的SA好到不知道哪里去了)#include#include#include#define N 400010using namespace std;char str[N];int s[N][26],mx[N],f[N],sz[N];原创 2017-09-19 21:55:55 · 539 阅读 · 0 评论 -
Jzoj1310 生日礼物
先模拟,这个是双向链表的工作,让后将移动过后的序列取出来,在序列上面作LIS,那么答案就是n-LIS为什么?很简单LIS上的数不用动其他的都一次移动搞定就好了原创 2017-09-19 22:02:39 · 545 阅读 · 0 评论 -
Jzoj1321 灯
我们考虑到点数比较少,而且按下开关的操作可以用异或代替,但是问题是2^35直接搜索会超时,所以我们采用折半搜索+map就可以ac了,复杂度O(2^(n/2)n)原创 2017-09-20 18:10:23 · 291 阅读 · 0 评论 -
Jzoj1322硬币
动态规划,设f[i][j]为上一次取到第i个硬币,上一次取了j个硬币的最大答案,则f[i][j]=max(SUM[i]-f[i-k][k]),对于f[i][j],可以沿原创 2017-09-20 19:12:58 · 349 阅读 · 0 评论 -
Jzoj1460 无题noname
给定一个N,求出所有1到N之间的x,使得x^2=1(mod N)。将这个式子变形(x-1)(x+1)=0(MOD P) ,那么就可以枚举P的每一对因数(a,b),我们把方程化为ax*by=P*T(T为任意常数)那么这里ax,by必须满足ax-by=2,这个可以用扩展gcd求解求出x,y后,我们将所有形如a*(x*(2/gcd)+k*(b/r))的解加入vector并排序输出(注原创 2017-09-20 19:34:15 · 307 阅读 · 0 评论 -
Jzoj2270 【SDOI2011】计算器
1、给定 y、z、p,计算y^z mod p的值; 2、给定 y、z、p,计算满足xy≡z(mod p)的最小非负整数 ; 3、给定y、z、p,计算满足y^x≡z(mod p)的最小非负整数 。第一问不说,第二问请看 同余方程 主要说第三问第三问是经典的离散对数(其实我并不会而且也基本不考)我们使用经典的giant-step-baby-step算法,令s=sqrt(m)原创 2017-09-20 20:06:42 · 240 阅读 · 0 评论 -
Jzoj2581 最大公约数
sum:=0; for i:=1 to n-1 do for j:=i+1 to n do sum:=sum+gcd(i,j)显然这个程序的效率是很低的,小明打算写一个更强的程序,在求出sum的同时比妹妹跑的更快。我们令A[i]为Σgcd(i,j)(j∈[1,i])那么很显然的,gcd(i,j)为i的因数,而当gcd(i,j)=1时,原创 2017-09-20 20:40:27 · 404 阅读 · 0 评论