自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

扩展の灰(Extended Ash/Cooevjnz)

御坂的抱枕,名字就叫灰哦,御坂抱着抱枕这样说道。

  • 博客(85)
  • 资源 (1)
  • 收藏
  • 关注

原创 一些基础算法的模板(持续更新)

更新中//Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft//To be continued...//Suffix Automationchar str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin

2017-10-25 22:05:58 3750

原创 OI一些奇怪的优化手段和常用技巧

经典的O3优化(一般写在开头)#pragma GCC optimize("O3")#pragma G++ optimize("O3")G++手动扩大栈(写在main的开始)int size = 256 << 20; // 256MB char *p = (char*)malloc(size) + size; __asm__("movl %0, %%esp\n" :: "r"(

2017-10-25 08:39:10 2649 2

转载 GD2016noip获奖名单

证书编号姓名性别总分学校年级备注CCF-NOIP2016-0362李奥男600中山市第一中学高二*CCF-NOIP2016-0363陈子陵男590汕头市金山中学高二*CCF-NOIP2016-0364杨家齐男585中山市中山纪念中学高三*CCF-NOIP2

2017-10-31 17:32:03 2365 1

原创 Jzoj4877 力场护盾(红警系列)

ZMiG成功粉碎了707的基因突变计划,为了人类的安全,他决定向707的科学实验室发起进攻!707并没有想到有人敢攻击她的实验室,一时间不知所措,决定牺牲电力来换取自己实验室的平安。    在实验室周围瞬间产生了一个无限大的力场护盾,它看上去无懈可击!不过ZMiG拥有惊人的双向观察能力,经过他的反复观察,找到了这个护盾的N个弱点,他本想逐一击破,却发现一股神秘力量阻止了他的行为。原来他身处力场

2017-10-31 16:28:49 1051

原创 Jzoj4876 基因突变(红警系列)

邪恶的707刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类!    但是统治人类是很庞大且复杂的一个工程,707尝试了洗脑,催眠,以及武装镇压都没能成功地统治人类,于是她决定从科学上对人类的基因进行研究从而达到他的目的。    707获取了人类的基因信息并尝试对基因进行实验。他发现可以把人类的基因看做一个只包含小写字母的字符串,并定义从头开始任意长度的基因为“源头基因”人类身上与源

2017-10-31 08:10:28 1346

原创 Jzoj4846 行走

这个题一看就是树剖的模型但是有一些问题,比如权值的乘机太大了,可能会爆long long一种解决的方法:我们考虑到,v对于权值为1的边我们可以用一个并查集合并(注意只会改小)但是这种方法不好想,我们还是考虑树剖若权值>=10^18 我们可以直接将其变为一个特殊的值(例如-1)表示“足够大”,这种情况直接输出0若不够,我们有一个结论: [[a/b]/c] = [a/bc] 这

2017-10-30 22:05:52 332

原创 Jzoj4845 寻找

“我有个愿望,我希望穿越一切找到你。”这是个二维平面世界,平面上有n个特殊的果实,我从(0,0)点出发,希望得到尽量多的果实,但是出于某种特殊的原因,我的运动方式只有三种(假设当前我在(x,y)):1、我可以走到(x+1,y)2、我可以走到(x,y+1)3、我可以走到(x+1,y+1)现在我需要你的帮助,帮我找出我最多能够得到多少个果实。经典的二维dp,我们设f

2017-10-30 22:00:23 305

原创 Jzoj4838 I like Matrix!

(I DO NOT like matrix!!!)首先我们可以暴力 O(nmq)考虑压位(bitset)可以得到60pts正解:我们发现,这些操作如果用边连接起来会形成一颗树(每个节点必然入度为1)那我们考虑用离线方法,将所有的操作连接起来,dfs遍历整颗操作树,每个操作都暴力修改&还原这样最多就是O(nq)的(然而我并不认为O(nq)能过,因为n)#include

2017-10-30 21:46:27 374

原创 Jzoj4841 平衡的子集

夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?这道题我们拷打数据范围后知道应该是折半搜索了但是似乎不是那么好做我们考虑如何搜索,显然每个人有三种状态,在队伍1中,在队伍2中和没有被选入我们将所有可能的状态都搜索出来加入一个数据结构(按照队伍1-队伍2的力量之差p作为关键

2017-10-30 17:00:08 339

原创 Jzoj4840 小W砍大树

模拟就好,dfs模拟,记录深度计算#include#includechar s[32010],*S; int dijk(char*& s,int d){ int ret=(~d&1),v; for(;*s!=')';++s){ if(*s=='('){ v=dijk(++s,d+1); ret=(d&1?ret|v:ret&v); } if(*s=='T'){ v=1;r

2017-10-30 16:53:22 465

原创 Jzoj4835 量化交易

一眼就可以看出是贪心,问题就是怎么去操作首先一个很显然的思路就是,开一个小根堆,每次对于一个价格x,如果低于堆顶我们就将其丢进去,否则将堆顶y取出,获得x-y的贡献但是这样是有问题的,我们会发现有反例: 1 4 2 3 用这种方法求出的答案是1但是正确答案应该是2所以我们需要增加一种“撤销操作”类似于种花那道题,我们每次将答案加上了x-y时候,我们也将x丢入堆中,而且要丢入两次,为

2017-10-30 07:49:06 605

原创 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 539

原创 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 355

原创 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 313

原创 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 377

原创 Jzoj4792 整除

给你一个1~n的排列A,询问一些区间内有多少对x,y使得A[x]|A[y]我们考虑将所有的询问按照r排序,让后分成两部分计算:1.A[i]|A[j] 且i>j2.A[i]|A[j] 且i这里只考虑第一种,第二种将所有询问对称翻转即可我们建立一个树状数组,我们令i=1~n每次将考虑A[i]的倍数,若kA[i]的位置j在i之前,我们就在树状数组中把s[j]+1那么显然,对于

2017-10-26 21:14:19 380

原创 Jzoj4791 矩阵

在麦克雷的面前出现了一个有n*m个格子的矩阵,每个格子用“.”或“#”表示,“.”表示这个格子可以放东西,“#”则表示这个格子不能放东西。现在他拿着一条1*2大小的木棒,好奇的他想知道对于一些子矩阵,有多少种放木棒的方案。(不是填满)我们考虑用前缀和的方式求出答案,这里我们假设所有的方案都是有向的,都是向上或者向左我们令s[i][j]表示子矩阵(1,1,i,j)的答案,那么s[i]

2017-10-26 20:48:49 344

原创 Jzoj4790 选数问题

在麦克雷的面前有N个数,以及一个R*C的矩阵。现在他的任务是从N个数中取出R*C个,并填入这个矩阵中。矩阵每一行的法值为本行最大值与最小值的差,而整个矩阵的法值为每一行的法值的最大值。现在,麦克雷想知道矩阵的最小法值是多少采用二分+贪心策略我们将r*c个数排序,显然,最优情况每一行必然是序列中一段连续的数字二分可以接受的最大法值那么判定合法的段数有没有r段即可

2017-10-26 20:42:23 329

原创 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 466

原创 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 372

原创 Jzoj4787 数格子

题意:用1x2的骨牌填满4xN的格子的方案数设f[i][j]表示填到第i行,这一行的状态为j的方案数f[i][j]=Σf[i-1][k],其中k->j是一个合法转移合法转移要满足两个条件:1.若k的第x位为0,那么j的第x位一定要为1 (~k|j==j)2.k,j都为一的位置必须是偶数个且必须连续,即k&j的二进制不能出现单独一个1,例如0101不合法,0011和0110都合法

2017-10-25 21:07:45 414

原创 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 335

原创 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 462

原创 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 304

原创 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 247

原创 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 361

原创 Jzoj4756 幻象

最近phantom得到了森の妖精的真传。在他练功的时候, 每秒他的思绪中都有一定的概率浮现出奇♂异的幻象,持续x秒的幻象将产生x^2 的幻象值。phantom练功发自真心,他想知道,在N秒内他期望产生的幻象值是多少。比较裸的期望dp设f[i]表示第i秒的期望幻象值那么,f[i]=f[i-1]+a[i]*((l[i-1]+1)^2-l[i-1]^2)其中l[i]是第i秒连续幻

2017-10-23 21:27:54 412

原创 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 351

原创 Jzoj4747 被粉碎的线段树

额这个题么有一个很关键的点:结点个数依然为2N-1(证明可以看sam的讲稿)不难发现以下性质:区间定位个数+区间所覆盖的节点个数=2*区间长度所以问题变为,一个区间覆盖了多少个节点?我们可以求出所有的节点,然后这个问题就是一个二维偏序计数问题了具体用离线+按照r排序套上树状数组即可#include#includeusing namespace std;inline

2017-10-23 19:48:31 412

原创 Jzoj4745 看电影

听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影。可是省常中OI队的同学们共有 N(N >= K)人。于是机智的你想到了一个公平公正的方法决定哪K人去看电影。N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出。继续上述操作,直到剩下K个人。但这样显然太无聊了,于是小S又想出一个牛逼的方法。

2017-10-23 19:37:55 367

原创 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 398

原创 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 459

原创 Jzoj4738 神在夏至祭降下了神谕(GOSICK系列)

我们先写裸的dp,设φ[i]表示长度为i的划分方案数,φ(0)=1有φ(i)=Σφ(j) (|sum[j,i]|sum用前缀和预处理就好(将0视为-1)那么我们考虑用树状数组快速更新,我们发现,若s[j](前缀和)在[s[i]-k,s[i]+k]中就可以合法转移所以我们考虑将φ[i]的值插入到s[i]的位置上,每次更新即可注意s[i]可能为负数,要开两倍长度#include

2017-10-23 07:15:01 627

原创 Jzoj4737 金色丝线将瞬间一分为二(GOSICK系列)

继续上一篇那套题可以将x,y宙分开讨论,对于每一维维护一个数据结构求出所有比之小的部分的和和比之大的部分的和所以我们先将这些点分别按x,y轴排序,得到rankx和ranky之后用树状数组即可#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include#include#include#define LL l

2017-10-22 22:45:56 764

原创 Jzoj4736 漆黑列车载运数个谎言(GOSICK系列)

最近的题目都太难了啊,于是在oj上面瞎找题目来切正好这一套题目名都比较优雅于是就选了这一套这个看起来十分像并查集没错,我们发现,如果两个结论互为逆反命题,那么这两个结论等价而且一个逆命题的逆命题或者是反命题的反命题就是自己所以我们发现,1和2是等价的,这就如同敌人的敌人是朋友一般(一道很经典的题了)我们将0视为两个人是朋友,1,2表示两个人是敌人询问就等价于两个

2017-10-22 22:36:07 508

原创 Jzoj4734 恶魔

其实就是在求有几对完全相等子串满足长度小于等于k而已很明显打一个sam就好了,条件就是mx[f[p]]#include#include#include#define N 200010 using namespace std;char str[N]; long long A=0;int s[N][26],mx[N],f[N],sz[N];int n,k,cnt=1,lst=

2017-10-21 22:00:17 305

原创 Jzoj4732 函数

有这么一个函数满足Σf(d)=n (d|n),给出序列a,求Σf(a[i])首先,大部分人一眼就能看出这个f就是phi吧那么考虑怎么求有phi(p)=p-1(p为质数)phi(ab)=phi(a)phi(b)(gcd(a,b)=1)phi(ka)=kphi(a)(k|a且k为质数)那么我们就可以类似于素数筛法的来计算phi了(这道题有三个点是题答题,还有一个点数据错

2017-10-21 21:45:35 351

原创 Jzoj4731 游戏(待填)

LCT模板,待填

2017-10-21 21:36:30 267

原创 Jzoj3654 【APIO2014】回文串

题意:求出现次数*长度最大的回文串很水的一道题直接用回文树可以切了太菜并不会回文树,用了极慢的sam+manachermanacher求出所有回文子串用sam在parent树上面倍增就可以求出一个串的出现次数,manacher是O(n)的,倍增lgn,整体复杂度nlgn(分开的manacher比什么插入特殊符号的好写多了)#include#include#include

2017-10-21 20:24:55 481

原创 Jzoj4729 道路修建

给你一个联通无向图,问你要修建几条边使得该图是一个边双连通图无比经典,肯定是一个tarjan求桥,删掉后缩点,变成一颗树,看看有几个叶子结点,叶子结点一对对连起来即可#include#include#include#includeusing namespace std;struct Edge{ int u,v,nt; } G[1000010];int c=1,h[50001

2017-10-18 20:01:17 397

E文本加密器

自己做的一个有趣的东西,可以将一段文字加密 目前暂不支持中文和非文本文件(目前主要就是加密code) 具体描述参照:https://blog.csdn.net/JacaJava/article/details/81807314

2018-08-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除