2016~2017
wspl654321
。。。。。。
展开
-
清北学堂总结(未完待续。。。。。。。)
1搜索: 先写出基本的搜索模板,然后将大小变量放入dfs返回值去,根据dfs中变量的数量开相应维数的数组,写出记忆化搜索,再根据边界条件和记忆化搜索写出dp。 2差值维护: #include<cstdio>using namespace std;int n;int m;int a[888][999],s[999][999];int main(){ scanf("%d%d",原创 2017-02-06 10:00:43 · 218 阅读 · 0 评论 -
SDOI 游记
去拿了10份就回来了。。。。。。。。。。原创 2017-06-16 17:00:35 · 372 阅读 · 1 评论 -
day2
stick 木棍(stick) Time Limit:1000ms Memory Limit:128MB题目描述 LYK有很多木棍,具体的,总共有n根,且每根木棍都有一个长度。为了方便起见,我们可以用一个正整数ai表示第i根木棍的长度。 LYK有一把小刀,但这把小刀由于削木棍很不方便,对于一根木棍而言,它只能用这把小刀削掉恰好1的长度。 LYK觉得如果4根木棍头尾相连能恰好拼成长方形,原创 2017-07-16 16:18:35 · 184 阅读 · 0 评论 -
day4
alien 飞船降落问题 矩阵前缀和+枚举 求出前缀和,暴力枚举每一个子矩阵的和,是0就可以降落 注意有正方形飞船,长度不等于点#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define D "%d"#define for(i,x,y) for(int i=x;i<=y;i++)#d原创 2017-07-26 11:23:15 · 180 阅读 · 0 评论 -
杂乱的题
小A和uim之大逃离 II 这个问题就是一个裸的bfs,多了一个专移的方向而已,很简单#include<cstdio>#include<queue>#include<iostream>using namespace std;int n , m , xx[5] = { 1 , -1 , 0 , 0 }, yy[5] = { 0, 0 , 1 , -1 }, vis[1999][1999][2原创 2017-08-18 15:13:48 · 206 阅读 · 0 评论 -
day6
cyclic 这个题直接模拟,先把k%一下防止过大 然后直接做就行了#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#define ll long longusing namespace std;char a[19999],A[19999];int n;int main(){ fre原创 2017-07-28 10:51:23 · 199 阅读 · 0 评论 -
day1
count 记录下每个节点的数量,如果能够取模一个数的个数正好有n/这个数个 那么就可以分成这个数块。 这个很好证明: 因为正好是这个数的倍数的有n/i个#include <cstdio>#include <iostream>#include <cmath>using namespace std;int num[1100000];int head[1100000],net[2100原创 2017-08-28 21:17:06 · 210 阅读 · 0 评论 -
day2
几 个 代码暂时流失了,等着补上 你 完全蒙蔽。。。。原创 2017-08-28 21:32:08 · 245 阅读 · 0 评论 -
day4
crf 的视察 最大正方形那个题,枚举一个起点,二分出最大的正方形的边 n^2logn的复杂度,也可以dp,i,j只能由i-1,j,i,j-1,i-1,j-1,转移过来,取最小值就行了#include<cstdio>#include<iostream>using namespace std;int n,m;int s[2009][2001],a[2001][2001],ans;int c原创 2017-08-28 21:44:10 · 245 阅读 · 0 评论 -
day5
黄金拼图 题意就是找第k大质数,但你会发现暴力会爆炸,所以我们考虑异或的性质,逆运算 下一次输入的一定是上回异或1或2,所以有下回输入的可以推出上一回的,因为没有相邻的质数,除2,3外,因为>=4, 所以,只有最后一个暴力出来就行了#include<cstdio>#include<algorithm>using namespace std;int n,m;bool p[1000900]原创 2017-08-28 22:31:32 · 209 阅读 · 0 评论 -
qb模拟题
t1 cmn,太大了质因数分解,用素数筛#include<cstdio>using namespace std;int p[1999999],n,m,mod,ans=1;int ip[1999999],pr[1999999];int tot;int fastpow(int a,int k){ int tot=1; while(k){ if(k&1) tot原创 2017-09-17 14:24:54 · 338 阅读 · 0 评论 -
day6
cyl 博弈题吗,还是模拟题?? 最好的情况是两步走三格,所以先把三格走完, 在走三格时可以将多余的步数走了,小于三如果可以摸,输出否则不行,一个等于三加上一个2原创 2017-08-28 22:37:33 · 258 阅读 · 0 评论 -
qb day6
k’th number#include<cstdio>#include<ALGORITHM>using namespace std;int n,m;long long k,ans;int a[299999],b[299999];long long check(long long x){ int j=m;long long s=0; for(int i=1;i<=n;i++)原创 2017-09-06 18:06:11 · 222 阅读 · 0 评论 -
qb standing
求两个圆的面积,有可能重合,相交等。。 求出相交四边形面积,加两个扇形面积#include<cstdio>#include<iostream>#include<cmath>#define w 3.1415926using namespace std;double x,y,r,x2,y2,r2,ans;int T;double ask(double x,double y,double原创 2017-09-20 14:13:02 · 195 阅读 · 0 评论 -
qb resist
约瑟夫环,暴力模拟。。。。。。。。 弄一个链表,把之前的联向删掉的下一个,以后就不回跳到删过的了#include<cstdio>#include<iostream>#include<cmath>using namespace std;int n,t,a[199999],p;int main(){ scanf("%d%d",&n,&t);p=n; for(int i=1;i原创 2017-09-20 14:52:08 · 154 阅读 · 0 评论 -
qb gcd
这个题一眼就看出来让a+b最小,起始地矩阵应该是(0,1),这样就最小了,然后辗转相除k次,每次贪心加小的,加他自己是最小的,因为设a,b,a%b,比a%b大的最小的且%b=a%b的,是a%b+b,(1,0+1)就成了两项的和,这不是斐波那契亚数列吗 用矩阵快速米搞#include<cstdio>#include<iostream>#define p 1000000007#define ll原创 2017-09-20 17:22:14 · 407 阅读 · 0 评论 -
jian
暴力 枚举#include<cstdio>using namespace std;#define ll long longint ans,n,s[1999999],a[199999],l,r;int gcd(int x,int y){ if(!y) return x; gcd(y,x%y);}int main(){ freopen("jian.in","r",s原创 2017-10-06 16:28:15 · 224 阅读 · 0 评论 -
他
模拟,将折起来的,弄到没折的地方去#include<cstdio>#define ll long longusing namespace std;ll n,f[3001];int m;int main(){ freopen("he.in","r",stdin); freopen("he.out","w",stdout); scanf("%lld%d",&n,&m);原创 2017-10-06 19:30:24 · 197 阅读 · 0 评论 -
she
#include<cstdio>#include<cmath>#define ll long longusing namespace std;ll x,y;ll gcd(ll a,ll b,ll &x,ll &y){ if(!b){ x=1,y=0; return a; } ll ret=gcd(b,a%b,x,y); ll原创 2017-10-06 21:56:08 · 307 阅读 · 0 评论 -
NP
打表。。。ac 可以暴力过90 n>=p 一定是0 所以n多的没用,n最多是1000000007,才一百倍。。 所以把10000000的倍数打一个表,跑暴力就行了。。#include<cstdio>#include<cstring>#include<iostream>using namespace std;long long n,p,ans=1;const int a[101]=原创 2017-10-07 09:22:44 · 253 阅读 · 0 评论 -
program
题意,找相同数组成的的比另一组相同的数小的对数 先排个序,因为选的方案与顺序无关,然后找相同的数的个数,这样就保证后面的一定大,相同的书组合方案就是个数的平方,因为一个数可选可不选,多一个数就多了 之前个数*2+1种方案,因为这个数可以和之前的组合,先处理处前面有多少组相同数,乘上后面的就行了#include<cstdio>#include<algorithm>#define ll long原创 2017-10-07 10:20:17 · 224 阅读 · 0 评论 -
select
贪心先选列,再选行,再将交叉的减去#include<cstdio>#include<algorithm>#include<queue> #define ll long longusing namespace std;int n,m,k,p; ll f[1999999],f2[1999999],ans=-1e16,a[1999999],b[1999999];priority_queue<l原创 2017-10-07 11:41:34 · 202 阅读 · 0 评论 -
chocolate
水题,模拟 二进制分解这种意思。。。。#include<cstdio>using namespace std;int n,tot;int main(){ freopen("chocolate.in","r",stdin); freopen("chocolate.out","w",stdout); scanf("%d",&n); while(n) {原创 2017-10-07 14:31:54 · 238 阅读 · 0 评论 -
run
90分代码,以为怪兽是<=100….. 二分+bfs。。#include<cstdio>#include<queue>#include<cmath>#include<cstring>using namespace std;int n,m,a[1001][1001],tot,s[1001][1001],vis[1001][1001];int xx[4]={1,-1,0,0};int y原创 2017-10-07 16:33:49 · 194 阅读 · 0 评论 -
cactus
这个说必须加入所有的点,也就是i,i+1之间一定有边,否则没法做,如果这样就必须选上所有点,在区间覆盖,就行了 dp方法。。。#include<cstdio>#include<queue>#include<cmath>#include<cstring>using namespace std;int n,m;int f[199999],g[199999];int main(){ fr原创 2017-10-07 17:57:58 · 213 阅读 · 0 评论 -
phi(大数质因数分解欧拉函数)
总结一下此题用的知识。。。 快速加,快速幂,素数判断(Miller_Rabin),gcd,Pollard_Rho。。。。 这里就写一个Pollard_Rho 对于一个大整数n,我们取任意一个数x使得x是n的质因数的几率很小,但如果取两个数x1以及x2使得它们的差是n的因数的几率就提高了(我也不会证明。。。。),如果取x1以及x2使得gcd(abs(x1−x2),n)>1的概率就更高了。这就是P原创 2017-10-07 20:59:49 · 2228 阅读 · 0 评论 -
Miller-Rabin
这是一种随机性素数判定算法,也就是说,答案可能出错,但是可能性极小。先是讲两个定理:费马小定理: 对于一个质数p,取任意整数a,满足gcd(p,a)=1,则有 ap−1≡1(modp) 二次探测定理: 对于0原创 2017-10-07 21:01:42 · 206 阅读 · 0 评论 -
arc(逆欧拉函数)
由phi(n)=n*(1-1/p1)(1-1/p2)…(1-1/pt) 得n=p1*p2*…pt*(phi(n)/ (p1-1)(p2-1)*…(pt-1)) 枚举质数,把phi(n)除完,把括号里的搞成1,最后的n就等于质数相乘。。。。 二需要特判,你可以除无限二,前面也可以乘无限二 但标程不对,没分解*2的,所以我把return挪后了 40 5 41 55 75 88 100错的原创 2017-10-08 09:06:23 · 473 阅读 · 0 评论 -
sum(欧拉函数之和)
已知∑d|nφ(d)=n\sum_{d|n} φ(d)=n 证明:设S(n)=∑ni=1φ(i)证明:设 S(n)=\sum_{i=1}^{n} φ(i) 因为∑d|nφ(d)=n\sum_{d|n} φ(d)=n ∑ni=1∑d|iφ(d)=n∗(n+1)/2\sum_{i=1}^{n} \sum_{d|i} φ(d)=n*(n+1)/2 ∑ni=1∑d|iφ(d)=∑ni=1∑⌊n/d⌋原创 2017-10-08 11:24:54 · 303 阅读 · 0 评论 -
lunch
#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n,m,a[1999999],a1,b1;bool f[1999999];int main(){ //freopen("a.in","r",stdin); //freopen("r2.out","w",stdout);原创 2017-09-30 09:26:39 · 269 阅读 · 0 评论 -
noip2013
day1 t1 转圈游戏(circle) 裸地快速幂。。#include<cstdio>using namespace std;int n,m,x,k;int fastpow(int a,int k){ int ans=1; while(k){ if(k&1) ans=(1ll*ans*a)%n; a=(1ll*a*a)%n;原创 2017-10-18 14:46:09 · 415 阅读 · 0 评论 -
联合权值
考虑一下,对于一个中节点,他的联合全职是所有临界点自由组合的和,也就是a*b+b*c+….. 这个值与a+b+c+。。。。有什么关系呢 2*a*b+2*b*c=(a+b+c+…)^2-a*a+b*b+c*c…… 而最大的,是最大值与次大值的组合 所以预处理处所有临界点的和,平方和,最大值次大值就行了O(n)复杂度#include<cstdio>#include<algorithm>#in原创 2017-10-18 14:51:27 · 196 阅读 · 0 评论 -
解方程
0%任何数都是零 可以用模的周期性,f(x)%k是零,f(x+k)%k也是零,很显然,那么你就模三个质数,像哈希一样 然后推出之后的数#include<cstdio>#include<queue>#include<cstring>using namespace std;#define ll long longconst int M=11000;int n,m;ll f[100000]原创 2017-10-19 07:57:37 · 258 阅读 · 0 评论 -
寻找道路
因为这个题是有向图,所以联通的条件是,正反都能跑,所以反着跑一边bfs,把没跑到的打上标记,然后正着跑spfa 因为第一次我去了好几层。wa了#include<cstdio>#include<queue>#include<cstring>using namespace std;queue<int>q;const int M=21000,N=410000,INF=2139062143;i原创 2017-10-19 08:05:06 · 237 阅读 · 0 评论 -
又一次测试题
循环移动给出一个字符串 S 与 N 个操作。每个操作用三元组(L, R, K)进行描述:操作将字 符串第 L 个到第 R 个位置构成的子串循环移动 K 次。一次循环移动就是将字符 串最后的这个字符移动到第一位,其余的字符顺次后移。例如,对于字符串 abacaba,操作(L=3, R=6, K=1)后得到的字符串即为 abbacaa。 求出在 N 个操作后得到的字符串。这个题模拟就行,第一次交的时候原创 2017-10-27 10:04:49 · 298 阅读 · 0 评论 -
Vigenère 密码
模拟,这是密文,找明文#include<cstdio>#include<iostream>#include<cstring>using namespace std;char a[110],b[1100];int main(){//printf("%d %d",'a','A'); gets(a); gets(b); int lena=strlen(a); int原创 2017-10-19 17:13:45 · 235 阅读 · 0 评论 -
选择客栈
这个题可以枚举一个客栈,然后找后面第一个小于p的客栈 那么这个客栈可以和后面的任何客栈组合,可以先记下后缀和 然后第一个小于p的客栈可以用倍增找时间复杂度为o(nlogn)或O(nk),后来我才发现这不是#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n,k,p,f[219999],x[原创 2017-10-19 17:38:49 · 344 阅读 · 0 评论 -
跳舞
if(j(modt))!=0)f[i][j]=max(f[i−1][j−1]+a[i],f[i−1][j]−a[i]);elsef[i][j]=max(f[i−1][j−1]+a[i]+b[i],f[i−1][j]−a[i]); if(j \pmod t)! =0) f[i][j]=max(f[i-1][j-1]+a[i],f[i-1][j]-a[i]); else原创 2017-10-27 11:21:20 · 471 阅读 · 1 评论 -
饥饿的奶牛
和之前一个尼克的任务一样 f[i+1]=max(f[i],f[i+1]);f[i+1]=max(f[i],f[i+1]); f[a[i][j]+1]=max(f[a[i][j]+1],f[i]+a[i][j]−i+1); f[a[i][j]+1]=max(f[a[i][j]+1],f[i]+a[i][j]-i+1);#include<iostream>#include<cstring>#in原创 2017-10-27 11:23:22 · 365 阅读 · 0 评论 -
洛谷10月月赛R2·浴谷八连测R3 -Chtholly-P3932 浮游大陆的68号岛
预处理处1~i全搬到1的前缀和 l-r全搬到1就是两个的减 如果在前面 就不用搬到一,减去多搬得是前面的相乘 在后面 就先搬到一 再搬到q前去多搬得 在中间的就转化为两个区间#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath> const int M=192608原创 2017-10-27 15:50:45 · 297 阅读 · 0 评论