自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 收藏
  • 关注

原创 解决VS2019默认用GBK编码导致输出中文乱码的问题

前言其实网上关于解决这个问题的博客已经有很多了,但是我尝试了很多方法之后都或多或少有不满意的地方,终于自己也摸索出了一套自我感觉相对完美的解决方案,因此发出来供后人参考。正文经过查阅资料和自己摸索尝试后,我总结了下解决用VS写的代码中的中文提交后会乱码的方法。 这个问题的原因在于评测环境和VS的编码不一致,VS默认是以GBK编码代码文件,而评测环境是UTF-8编码,因此本地写好的代码交上去后会在评测机中乱码,所以解决方法就是把VS的编码改为UTF8。 网上的操作大概有这么几种:在文件-高级保存选项

2020-10-07 23:00:29 53689 15

原创 BUAA OS实验环境配置指南-2020年版[2020.5.22更新]

BUAA OS实验环境配置指南-2020年版文章目录BUAA OS实验环境配置指南-2020年版前言为什么要配环境?配置环境过程中的尝试完整配置教程准备工作安装虚拟机安装ELDK编译器64位系统的准备工作正式安装安装gxemul小小的准备工作正式安装安装IDE前言时至2020年,实验指导书上的配环境方法有一部分已经不能使用,网上的资料很多也过时了。笔者踩了无数坑终于把OS环境配置好了,为了避免后人继续踩坑,故将配置经验分享出来。本文也许也会在未来的某一天过时,因此读者阅读时,请注意本文的发布时间。为

2020-05-20 15:29:11 2745 5

原创 [BZOJ 4542][Hnoi2016]大数:莫队

点击这里查看原题首先可以考虑,除了2和5之外,10k10^{k}不是任何素数的倍数,因此可以先解决p不为2或5的情况。对从每个位置开始的到末尾结束的子串求一下模p的值,再离散化一下(因为题目没有给出p的范围),这样的话如果两个位置i,j模p的值相同,那么S[i…j-1]就是符合条件的一个子串。莫队处理即可 再来考虑下2和5的情况,可以发现,如果某个数是2或5的倍数,那么它的个位一定也是2或5的倍数

2017-07-01 10:32:16 483

原创 [BZOJ 1089][SCOI2003]严格n元树:DP+高精度

点击这里查看原题DP,gig_{i}表示高度小于i的树的个数,gi=∑i−1j=0f(j)g_{i}=\sum_{j=0}^{i-1}f(j), fif_{i}表示高度为i的树的个数。 于是可得fi=∑j=1n(nj)∗fji−1∗gn−ji−1f_{i}=\sum_{j=1}^{n} \binom{n}{j}*f_{i-1}^{j}*g_{i-1}^{n-j}此题需要用到高精度#include

2017-06-30 10:34:23 439

原创 [BZOJ 4454]C Language Practice:GCD

点击这里查看原题此题太过丧心病狂,建议看这里 另外这题要学会卡时,一定要加inline才勉强在20.7s内跑过#include<bits/stdc++.h>#define ll long long#define inf 99999999using namespace std;const int M=1005,N=1e6+5;int n,m,a[M<<1],b[M<<1],cnt,pr[N

2017-06-22 23:12:12 439

原创 [BZOJ 3876][Ahoi2014]支线剧情:上下界网络流

点击这里查看原题本题是有源汇上下界最小费用流,具体建图如下:从每个点u向它能到达的点v连容量inf费用为w的边,从s’向v连容量1费用w的边,从u向t’连容量1费用0的边从每个非根的点u向t连容量inf费用0的边(因为随时可以跳出这段剧情)从t向s连容量inf费用0的边#include<bits/stdc++.h>#define ll long long#define inf 99999

2017-06-22 21:18:33 414

原创 [BZOJ 2502]清理雪道:上下界网络流

点击这里查看原题点击这里查看上下界网络流教程这个题很明显就是:从ss到所有点连下界00上界infinf的边(因为可以从任何点出发)从所有出度为零的点到tt连下界00上界infinf的边(最优方案一定是到达该点才结束)所有点向他能到达的点连下界11上界infinf的边(每条边至少走一次)那么实际建图就是这样的:对于每个点计算它的入度减出度的差d[i]d[i],若d[i]>0d[i]>0,则从s

2017-06-22 20:52:16 374

原创 [BZOJ 1822][JSOI2010]Frozen Nova 冷冻波:最大流

点击这里查看原题首先暴力判断哪些巫妖可以打到哪些小精灵,先判距离是否小于半径,然后判断树是否阻挡。判断树的方法是先计算出巫妖和小精灵连线的一般式ax+by+c=0,然后据此计算树的圆心到两点连线的距离dis=|ax+by+x|a2+b2√dis=\frac{\left | ax+by+x \right |}{\sqrt{a^{2}+b^{2}}},是否小于树的半径。 接下来就是二分时间time,源

2017-06-15 21:00:26 329

原创 [BZOJ 3261]最大异或和:可持久化字典树

点击这里查看原题插入操作只会插入到末尾,因此可以用可持久化字典树,rt[i]表示维护的是前i-1个数的异或值,同时维护所有数的异或值tot,因此要得到a[i]~a[n]的异或值就是用rt[i]的查询值异或tot。 那么对于询问而言,我们在字典树上贪心即可/*User:SmallLanguage:C++Problem No.:3261*/#include<bits/stdc++.h>#d

2017-06-15 20:11:56 647

原创 [BZOJ 1221][HNOI2001] 软件开发:费用流

点击这里查看原题建议看这里http://www.acyume.com/archives/1069/*User:SmallLanguage:C++Problem No.:1221*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int N=2005,M

2017-06-15 18:05:58 319

原创 [BZOJ 3112][Zjoi2013]防守战线:单纯形

点击这里查看原题 (那个链接里没有题面,题面在这里)单纯形裸题,因为题目中是求最大值,因此需要使用对偶原理/*User:SmallLanguage:C++Problem No.:3112*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const double

2017-06-15 16:23:56 394

原创 [BZOJ 2657][Zjoi2012]旅游(journey):树的直径

点击这里查看原题这道题应该把城市看成点,相邻的城市之间连边,这样会形成一棵树,答案即为树的直径。/*User:SmallLanguage:C++Problem No.:2657*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=2e5+5,

2017-06-15 14:19:34 348

原创 [BZOJ 1070][SCOI2007]修车:费用流

点击这里查看原题费用流经典好题。将每个维修人员拆成n个点,第i个维修人员的第j个点与第k辆车连边表示k是i修的倒数第j辆车,因此费用为v[k][i]*j。 将源点与所有车连容量为1费用为0的边,车与维修人员拆成的所有点连容量为1费用为v[k][i]*j的边,维修人员拆成的所有点与汇点连容量为1费用为0的边 (这道题我分别WA、RE了一次,WA是没注意到读入的顺序是m,n而不是n,m;RE是因为对

2017-06-15 11:28:07 870

原创 [BZOJ 2656][Zjoi2012]数列(sequence):高精度+递推

点击这里查看原题读入n,转为2进制,每次记录(x,x+1)两个值,如果当前位为1,转化为(2x+1,2x+2),否则转化为(2x,2x+1)(用二进制来表示x就是n的当前位为1,则在x后面添1,否则添0),即可得到ana_{n}的值 高精度细节很多,要小心/*User:SmallLanguage:C++Problem No.:2656*/#include<bits/stdc++.h>#

2017-06-14 17:51:12 358

原创 [BZOJ 3811]玛里苟斯:线性基(详细证明)

点击这里查看原题极其复杂的题目……看了一早上题解才看懂 分类讨论 k=1时,考虑每一位对答案的影响,若至少存在一个数第j位为1,那么异或和中第j位为1的概率为0.5,否则为零。因为取到奇数个第j位为1的数的概率和取到偶数个的概率相等。 k=2时,把异或和转化为2进制,那么每个异或和的平方为∑i∑jbibj∗2i+j\sum _{i} \sum _{j}b_{i}b_{j}*2^{i+j},那么

2017-06-14 11:47:51 1816

原创 [BZOJ 2115][Wc2011] Xor:线性基

点击这里查看原题结论:答案一定是任意一条1~n的路径异或某些环得到的值 接下来是证明为什么每个环都可以取到:如果要取某个环,可以从1出发到这个环上,走一圈后原路回到1,这样就得到了这个环的异或值。 因此将所有的环加入线性基中求基,然后求一条从1到n的路径,贪心的从高位到低位与基异或/*User:SmallLanguage:C++Problem No.:2115*/#include<bi

2017-06-13 16:03:45 405

原创 [HDU 3949]XOR:线性基

点击这里查看原题线性基教程https://blog.sengxian.com/algorithms/linear-basis 本题要求第k小的异或和,那么可以将k转为2进制数,对于第i位,如果为1,那么答案异或上g[i]。注意的一点是如果基的元素数小于n,那么存在异或和为0的方案,因此需要将k减1/*User:SmallLanguage:C++Problem No.:3949*/#inc

2017-06-13 14:58:10 385

原创 [BZOJ 3524][Poi2014]Couriers:可持久化线段树

点击这里查看原题主席树,建立权值线段树进行查询/*User:SmallLanguage:C++Problem No.:3524*/#include<bits/stdc++.h>#define ll long longusing namespace std;const int M=5e5+5;int n,q,cnt,rt[M];struct no{ int ls,rs,su

2017-06-12 17:43:29 342

原创 [BZOJ 3302][Shoi2005]树的双中心:TreeDP

点击这里查看原题首先可以想到n^2做法,枚举每一条边,切断这条边变成两棵树,对两棵树各O(n)求一遍重心,加和即为答案 但是题目中有一个重要条件,高度h不超过100,因此可以O(h)求重心,即每次向权值和最大的儿子转移(维护时需要维护最大和次大)。 总复杂度O(nh)/*User:SmallLanguage:C++Problem No.:3302*/#include<bits/stdc

2017-06-12 16:01:04 608

原创 [BZOJ 1013][JSOI2008]球形空间产生器sphere:高斯消元

点击这里查看原题设球心坐标为(x1,x2,x3,…,xn),某个点的坐标为(y1,y2,y3,…,yn),点到球心的距离为L,那么 L2=(y12−2∗x1∗y1+x12)+(y22−2∗x2∗y2+x22)+(y32−2∗x3∗y3+x32)+...+(yn2−2∗xn∗yn+xn2)L^{2}=({y_{1}}^{2}-2*x_{1}*y_{1}+{x_{1}}^{2})+({y_{2}}^{

2017-06-12 10:36:35 421

原创 [BZOJ 1053][HAOI2007]反素数ant:搜索

点击这里查看原题实际上是求n以内因数最多的数。初看数据范围会以为是数论题,实际上可以贪心,素数的次数相同时小素数比大素数更优。预处理出前若干个素数,发现前10个素数之积已超过2e9,因此可以搜索。/*User:SmallLanguage:C++Problem No.:1053*/#include<bits/stdc++.h>#define ll long long#define inf

2017-06-12 08:58:02 290

原创 [BZOJ 3674]可持久化并查集加强版:可持久化并查集

点击这里查看原题按秩合并,即深度小的根的fa指向深度大的根;如果深度相同,那么随便合并,之后深度+1/*User:SmallLanguage:C++Problem No.:3674*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=2e5+

2017-06-10 11:10:25 425

原创 [UOJ 3]【NOI2014】魔法森林:LCT

点击这里查看原题将所有路径按a升序排序,用LCT维护路径上最大的b,将边权化为点权,如果加入一条边x,其两端点分别为u,v,那么将u与i+x连边,v与i+x连边。 如果(u,v)路径最大的b值大于当前边的b,那么删去b最大的边。 注意:access操作中必须pushup,因为这个调了好久/*User:SmallLanguage:C++Problem No.:3*/#include<bi

2017-06-06 20:59:38 390

原创 [UOJ 5]【NOI2014】动物园:KMP

点击这里查看原题cnt[i]表示从i出发,经过cnt[i]次nex[i]到达0。于是做两次KMP,第一次求nex[i]和cnt[i],第二次求i一直nex[i]到达的第一个≤i/2的位置/*User:SmallLanguage:C++Problem No.:5*/#include<bits/stdc++.h>#define ll long long#define inf ((ll)1<

2017-06-06 10:28:36 500

原创 [UOJ 130]【NOI2015】荷马史诗:哈夫曼树

点击这里查看原题二叉哈夫曼树教程:http://blog.csdn.net/shuangde800/article/details/7341289 这里是k叉哈夫曼树,依然采取贪心策略,不过需要注意的是首先要判断(n-1)%(k-1)是否为0,不为0则要添加权值为0的节点直到(n-1)%(k-1)=0 这是因为,每次合并操作会取出k个点,放进1个点,即每次减少k-1个点。而最终目标是使n个点变为

2017-06-06 08:18:59 459

原创 [UOJ 131]【NOI2015】品酒大会:后缀数组+并查集

点击这里查看原题首先用后缀数组求出每个串和上个串的公共前缀长度,然后按公共前缀长度由长到短进行合并,用并查集维护。/*User:SmallLanguage:C++Problem No.:131*/#include<bits/stdc++.h>#define ll long long#define inf ((ll)1<<60)using namespace std;const in

2017-06-05 08:45:50 466

原创 [UOJ 220]网格:Tarjan

点击这里查看原题把蛐蛐视为障碍,其他视为空地,那么对答案有影响的只有蛐蛐周围24个方格(八连通)中的空地,其中,八连通的空地为1级空地,八连通外围的空地为2级空地,然后分类讨论跳蚤数量<2或跳蚤数量等于2且相邻,无解某个蛐蛐周围的方格不在同一连通块内,0某个空地是一级空地且为割点,1n或m=1,1其他情况,2最初用map写的,然后有两个点TLE了,于是只好手写hash 然而调了一早上交

2017-06-04 11:05:54 332

原创 [BZOJ 3944]Sum:杜教筛

点击这里查看原题贴一个杜教筛教程http://blog.csdn.net/skywalkert/article/details/50500009预处理n^(2/3)+记忆化注意虽然n的范围是2^31-1,没有爆int,但是n+1爆了,所以要用ll/*User:SmallLanguage:C++Problem No.:2301*/#include<bits/stdc++.h>#define

2017-06-02 20:37:37 326

原创 [BZOJ 4804]欧拉心算:莫比乌斯反演

点击这里查看原题经过一系列反演,得到 (看不懂的建议先去做BZOJ 2820) 于是接下来就是要对求前缀和,这个需要分类讨论,具体看代码/*User:SmallLanguage:C++Problem No.:4804*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace s

2017-06-02 09:56:12 647

原创 [BZOJ 2301][HAOI2011]Problem b:莫比乌斯反演+容斥

点击这里查看原题类似于BZOJ 1101,不过要多套个容斥 注意,a和c要先-1再/k(我因为先/k后-1 WA了一次)/*User:SmallLanguage:C++Problem No.:1101*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const

2017-06-02 09:41:45 306

原创 [BZOJ 2693]jzptab:莫比乌斯反演

点击这里查看原题和BZOJ 2154类似,但是是多组数据,需要转化 http://blog.csdn.net/PoPoQQQ/article/details/42078725(注意取模的问题,我因为输出答案时没有+mod%mod而WA了一次)/*User:SmallLanguage:C++Problem No.:2693*/#include<bits/stdc++.h>#define

2017-06-01 17:23:47 390

原创 [BZOJ 2154]Crash的数字表格:莫比乌斯反演

点击这里查看原题太强了……还是看PoPoQQQ的题解吧 于是进行两次分块,求F(x,y)为sqrt(n),求ans也为sqrt(n),总复杂度O(n)/*User:SmallLanguage:C++Problem No.:2154*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using names

2017-06-01 11:43:42 323

原创 [BZOJ 1101][POI2007]Zap:莫比乌斯反演

点击这里查看原题设,即f(n)表示的对数; 设,即g(n)表示的对数于是可得 经过莫比乌斯反演可得 将a,b分别除d,得到a’,b’,问题转化为求g(1)的值(下文的d不等于题中的d) 因为d在一定范围内,的值是不变的,所以对求个前缀和,然后分块去做/*User:SmallLanguage:C++Problem No.:1101*/#include<bits/stdc++.h>

2017-06-01 09:31:28 325

原创 [BZOJ 1853][Scoi2010]幸运数字:容斥原理

点击这里查看原题因为最多有10位,所以最多有2+4+…+1024=2046个数,去掉存在倍数关系的数,对剩余的数做容斥/*User:SmallLanguage:C++Problem No.:1853*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;int hea

2017-05-31 20:54:57 295

原创 [BZOJ 1042][HAOI2008]硬币购物:容斥原理

点击这里查看原题f[i]表示在不考虑硬币数量的情况下,达到i元的方案数。 于是进行容斥,答案=所有方案数-有一种硬币超出限制(即使用d[i]+1枚硬币)+有两种超出限制-有三种超出限制+有四种超出限制/*User:SmallLanguage:C++Problem No.:1042*/#include<bits/stdc++.h>#define ll long long#define

2017-05-31 11:48:39 320

原创 [BZOJ 2190][SDOI2008]仪仗队:欧拉函数

点击这里查看原题显然,对于每个(x,y)(x,y均不为1),(x,y)能被看到的条件是gcd(x-1,y-1)=1,因此我们需要求gcd(x-1,y-1)=1的对数,由于第一排、第一列分别有一个可以看到的,因此答案还需要加2。对每一排,x<=y中,满足条件的x的个数等于phi(y);对每一列同理(但是(2,2)被算了两次),因此答案=2*sigma(phi(i))-1+2(1<=i<=n)/*Us

2017-05-31 11:09:35 453

原创 [BZOJ 2705][SDOI2012]Longge的问题:欧拉函数

点击这里查看原题求sigma(gcd(i,n)),枚举n的约数k,s(k)表示满足gcd(i,n)=k(1<=i<=n)的i的个数,所以答案为sigma(k*s(k)),求s(k)即为求gcd(i/k,n/k),即为phi(n/k)。/*User:SmallLanguage:C++Problem No.:2705*/#include<bits/stdc++.h>#define ll lo

2017-05-31 10:40:27 353

原创 [BZOJ 2186][Sdoi2008]沙拉公主的困惑:欧拉函数

点击这里查看原题首先可以得到结果为phi(m!) * (n!/m!)%r,那么难点在于phi(m!)如何求。 因为phi(m!)=m! * (p-1)/p,p为小于m!的质数,所以可以用一个数组ans[i]表示phi(m!)/m!的结果,ans[i]=ans[i-1],如果i为质数,那么ans[i]=ans[i] * (i-1) * inv[i]%r。另附上递推逆元的证明(以前只会写不会证) By

2017-05-31 10:00:48 283

原创 [BZOJ 3884]上帝与集合的正确用法:欧拉定理

点击这里查看原题题解见出题人blog http://blog.csdn.net/popoqqq/article/details/43951401/*User:SmallLanguage:C++Problem No.:3884*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace

2017-05-31 08:57:21 415

原创 [BZOJ 2820]YY的GCD:莫比乌斯反演

点击这里查看原题推导很强,建议看这里我最初主要是没看懂线性筛求g[i]的部分,在这里补充下: g[i * prime[j]]中如果prime[j] | i,那么i * prime[j]/pp(pp为素数)只有两种情况:pp==prime[j],那么g[i * prime[j]]+=mu[i];pp!=prime[j],那么i * prime[j]/pp一定是prime[j]^2的倍数,根据莫比

2017-05-28 17:20:20 667

空空如也

空空如也

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

TA关注的人

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