自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hychychyc

666

  • 博客(313)
  • 收藏
  • 关注

原创 Miller-Rabin

这是一种随机性素数判定算法,也就是说,答案可能出错,但是可能性极小。先是讲两个定理:费马小定理: 对于一个质数p,取任意整数a,满足gcd(p,a)=1,则有 ap−1≡1(modp) 二次探测定理: 对于0

2017-10-07 21:01:42 206

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

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

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

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

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

原创 program

题意,找相同数组成的的比另一组相同的数小的对数 先排个序,因为选的方案与顺序无关,然后找相同的数的个数,这样就保证后面的一定大,相同的书组合方案就是个数的平方,因为一个数可选可不选,多一个数就多了 之前个数*2+1种方案,因为这个数可以和之前的组合,先处理处前面有多少组相同数,乘上后面的就行了#include<cstdio>#include<algorithm>#define ll long

2017-10-07 10:20:17 224

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

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

原创

模拟,将折起来的,弄到没折的地方去#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 198

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

原创 hao

这个题直接分解质因数,把偶数个的除以二乘起来在平方,可以用数学公式,拆指数#include<cstdio>using namespace std;#define ll long longconst int p=100000007;int n;bool ip[5099999];int pr[5099999],s[5099999];int tot;ll fastpow(ll a,ll k){

2017-10-06 16:27:40 174

原创 ha

模拟题,忍不住吐槽一下,为什么qb总是第一题先恶心一下人呢,这个题写了两小时也没a。。。。。#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n,root=1;char s[199999];int head[199999],nex[199999];int clear(int t){

2017-10-06 11:15:46 216

原创 haha

站操作,先预处理出最大值的位置,然后输出住最大值,再找次大值,之前如站得比次大值大的先输出,才输出次大值依次循环,直至结束#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>int zhan[1999999],top,a[1999999],max1,pos1,maxn[1999999],pos[19

2017-10-06 11:13:32 156

原创 hahaha

这个题就可以模拟因为没有交点,所以排一个序对应的就是连起来的直线 然后可以二分最多可以到那个直线,因为直线一定是一个个往上的,有顺序,一开始我以为能n*m倒着结束,可是不行,只能二分了。。#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>int n;using namespace std;int

2017-10-06 11:08:44 153

原创 eyesight

呃呃,胡乱写了一个凑巧a了#include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;int t,n,m,s1,s2,ans,v[19999],v2[19999],s[19999],ss[19999];int cmp(const int a,const int b){

2017-10-06 08:10:23 203

原创 death

用单调队列维护m个位置,找最小的#include<cstdio>#include<queue>using namespace std;int n,m;priority_queue<int>q;int main(){ freopen("death.in","r",stdin); freopen("death.out","w",stdout); scanf("%d%d"

2017-10-06 08:09:08 194

原创 two

很简单的模拟题,就是闰年很恶心。。。。#include<cstdio>using namespace std;int a[7],b[7];int s[19],y[]={0,31,28,31,30,31,30,31,31,30,31,30,31},s2[19],sy[199];int main(){ freopen("two.in","r",stdin); freopen("t

2017-10-06 08:07:21 151

原创 暴力

用的暴力,状压dp怎么调也不过了23333333#include<cstdio>#include<iostream>#include<algorithm>#include<vector>#include<queue>#include<cstring>#include<cmath>using namespace std;int n,m,k,t;int a[100009];int vi

2017-10-05 17:15:35 259

原创 sum

用单调栈搞出区间最大值和最小值 然后记下,一步步跳到下一个最大值和最小值,再垒起来#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int T,n,a[100010],nextmin[100010],nextmax[100010],top,pos[10

2017-10-04 21:41:12 184

原创 回形遍历

我的思路就是模拟 但写错了。#include<cstdio>#include<iostream>using namespace std;int x,y,n,m,z,xx,t;int main(){ scanf("%d%d%d%d%d",&n,&m,&x,&y,&z); xx=min(x,min(n-x,min(y,m-y))); int w=n-2*(xx)-1,w

2017-10-04 21:14:18 313

原创 prison

这个可以状态压缩,用二进制表示,每一位表示第几个选不选 然后就枚举两个子集,合并找最小的组数#include<iostream>#include<queue>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N= 1<<17;int n,m,k,f[N];bool

2017-10-04 21:12:44 253

原创 unknown

先预处理处每一个括号位置,再输出#include<iostream>#include<queue>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<vector>using namespace std;#define N 500009char s[N];int len;int

2017-10-04 21:08:45 287

原创 express

贪心,先满足,再加最大的#include<cstdio>#include<algorithm>using namespace std;#define ll long longll n,m,s,k;struct st{ ll t,s,u;}a[219999];int f[219999];int cmp(const st &a,const st &b){ if(a.t>b.

2017-10-04 21:05:03 149

原创 文章标题

includeincludeincludeusing namespace std; int n,m,q,a[199999],f[199999]; int main(){ scanf(“%d%d%d”,&n,&m,&q); for(int i=1;i<=m;i++) scanf(“%d”,&a[i]),a[i]; while(q–){ int l,r

2017-09-30 11:28:37 120

原创 tree

这个题很显然就是找,第三深度的边,那么找哪一个点做根呢,一定是深度最深的两个组成路径,这不就是直径吗,所以跟一定在直径上,再找深度最大的就行了吗,用一个dfs找就行#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n;int maxn,max2,max3,f[199999],r[199999]

2017-09-30 10:56:12 148

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

原创 希望

模拟两个栈,输出#include<cstdio>#include<iostream>#include<cstring>#include<iostream>#include<string>using namespace std;string s[1999];int t=2;int str1[19999],str2[19999],top,top2;string ww="http://ww

2017-09-29 17:56:53 176

原创 qb mjy题

很简单的模拟题,可我竟想了好久,听什么xy,hjx二分,吓了一跳。。。。这个题先让他它爬到最高,再一个一个减#include<cstdio>#include<iostream>#define ll long longusing namespace std;int n,m;ll minn=9999999999;int gcd(int x,int y){ if(!y) return x

2017-09-27 17:21:57 222

原创

f(f(n)) 有周期性,打表出来,周期为2000000016和329610 然后求出对应值就行了#include<cstdio>#include<iostream>#include<cstring>#define ll long long const int p=1000000007;#define p2 2000000016#define p3 329610using name

2017-09-27 14:17:53 132

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

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

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

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

原创 day7

星际旅行 组合的思想,想想就会了#include<cstdio>#include<algorithm>using namespace std;int f[199999],ff[199999];int n,m;int find(int x){ if(f[x]==x) return x; int fx=find(f[x]); return f[x]=fx;}in

2017-09-10 18:01:55 154

原创 最长上升子序列

模板,上升和下降,如果小加加,否则把最大的变小#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int h[300001],rise[300001],down[300001];int find(int l,int r,int x){ while(l<=r) {

2017-09-10 17:58:57 135

原创 qb day5

保留道路 弄一个最小生成树。。。#include<cstdio>#include<iostream>#include<algorithm>#define ll long longusing namespace std;int n,m;struct st{ ll s,g; int x,y;};st a[50999];st tmp[51999],tmp2[59899]

2017-09-10 17:44:49 219

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

原创 day6

cyl 博弈题吗,还是模拟题?? 最好的情况是两步走三格,所以先把三格走完, 在走三格时可以将多余的步数走了,小于三如果可以摸,输出否则不行,一个等于三加上一个2

2017-08-28 22:37:33 258

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

空空如也

空空如也

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

TA关注的人

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