先是到现在还是靠背的版

线性筛,O(2*N)

 1 int flag[N],prim[N],cnt;
 2
 3 int built(int n)
 4 {
 5     for(int i=2;i<=n;i++)
 6     {
 7         if(flag[i]==0)
 8          prime[cnt]=i,cnt++;
 9         for(int j=0;j<cnt&&i*prim[j]<=n;j++)
10         {
11             flag[i*[prim[j]]=1;
12             if(i%prim[j]==0)
13              break;
14         }
15     }
16 } 

exgcd

 1 int exgcd(int a,int b,int x,int y)
 2 {
 3     if(b==0)
 4     {
 5         x=1;
 6         y=0;
 7         return a;
 8     }
 9     int ret=exgcd(b,a%b,y,x);
10     y-=a/b*x;
11     return ret;
12 }

数论相关其他知识点:

•解多组同余方程

考虑两组方程:

x ≡ d1 mod m1

x ≡ d2 mod m2

设设x=k1m1+d1=k2m2+d2,联立可得新方程为

dx=k1m1+d1,mx=lcm(m1,m2)

//表示根本看不出是如何解得的...

则x≡dx mod mx

•逆元:ax≡1 mod p,则min(a)=mb表示a对于p的逆元,p为质数时a=p-2,可以递推得:ans[i]=(p-p/i)*ans[p%i]%p表示i对p的逆元

应用:求a/b mod p=a*b mod mb

•(a^b)%p=a^(b%(p-1)),p为质数

树状数组空间O(n)优于线段树,某些时候线段树会被卡,所以还是必须背

 1 int read(int k)
 2 {
 3     int sum=0;
 4     while(k)
 5     {
 6         sum+=tree[k];
 7         k-=k&-k;
 8     }
 9     return sum;
10 }
11
12 void add(int k,int num)
13 {
14     while(k<=n)
15     {
16         tree[k]+=num;
17         k+=k&-k;
18     }
19 }

stl heap

1 int main()
2 {
3     make_heap(heap,heap+size);
4     push_heap(heap,heap+(++size));
5     pop_heap(heap,heap+(size--));
6     //改变堆的大小:greater<int>()或者自己写compare函数
7 }

已经可以写但是最好复习一下的常用模板

快速幂快速乘

 1 int pow(int a,int b)
 2 {
 3     int ans=1;
 4     for(int i=0;b!=0;i++,a*=a)
 5      if(b&(1<<i))
 6       ans*=a,b-=(1<<i);
 7     return ans;
 8 }
 9
10 int multi(int a,int b)
11 {
12     int ans=0;
13     for(int i=0;b!=0;i++,a+=a)
14      if(b&(1<<i))
15       ans+=a,b-=(1<<i);
16     return ans;
17 } 

凸包模板

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<cstdlib>
 4 #include<string.h>
 5 #include<algorithm>
 6 #include<math.h>
 7 #define N 1000005
 8 using namespace std;
 9 int n;
10 double answer;
11
12 struct object
13 {
14     int x,y;
15 }ans[N],point[N];
16
17 int pow(int a)
18 {
19     return a*a;
20 }
21
22 double dis(object a,object b)
23 {
24     return sqrt(pow(a.x-b.x)+pow(a.y,b.y));
25 }
26
27 int mul(object a,object b,object c)
28 {
29     return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
30 }
31
32 int cmp(object a,object b)
33 {
34     int thi=mul(a,b,point[0]);
35     if(thi==0)
36      return dis(a,point[0])<dis(b,point[0]);
37     return thi>0;
38 }
39
40 void graham()
41 {
42     for(int i=1;i<n;i++)
43      if(point[i].x<point[0].x||point[i].x==point[0].x&&point[i].y<point[0].y)
44       swap(point[0],point[i]);
45     sort(point+1,point+n,cmp);
46     ans[0]=point[0];
47     ans[1]=point[1];
48     ans[2]=point[2];
49     int cnt=2;
50     for(int i=3;i<n;i++)
51     {
52         while(cnt!=0&&mul(point[i],ans[cnt],ans[cnt-1])>=0)
53          cnt--;
54         cnt++;
55         ans[cnt]=point[i];
56     }
57 }
58
59 int main()
60 {
61 }

kmp

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #define N 1000000
 7 using namespace std;
 8 int next[N];
 9
10 void get_next(char &s)
11 {
12     int t1=0,t2=-1,len=strlen(s);
13     next[0]=t2;
14     while(t1<len)
15     {
16         if(t2==0||s[t1]==s[t2])
17         {
18             t1++;
19             t2++;
20             next[t1]=t2;
21         }
22         else t2=next[t2];
23     }
24 }
25
26 int kmp(char &s1,char &s2)//s2是短的那个
27 {
28     int ret=0;
29     int len1=strlen(s1),len2=strlen(s2);
30     int t1=0,t2=0;
31     while(t1<len1)
32     {
33         if(s1[t1]==s2[t2])
34         {
35             t1++;
36             t2++;
37         }
38         else t2=next[t2];
39         if(t2==len2-1)
40          ret++;
41     }
42     return ret;
43 }
44
45 int main()
46 {
47 }

树上倍增

 1 #include<iostream>
 2 #include<string.h>
 3 #include<stdio.h>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #define N 100005
 7 #define logn 17
 8 #define inf 0x3f3f3f3f
 9 using namespace std;
10 int n;
11 int begin[N];
12 int cnt;
13 int deep[N],father[N][logn],ans[N][logn];
14
15 struct edge
16 {
17     int b,next,weight;
18 }E[N*2];
19
20 void addedge(int a,int b,int weight)
21 {
22     E[cnt].b=b;
23     E[cnt].next=begin[a];
24     E[cnt].weight=weight;
25     begin[a]=cnt;
26     cnt++;
27     E[cnt].b=a;
28     E[cnt].next=begin[b];
29     E[cnt].weight=weight;
30     begin[b]=cnt;
31     cnt++;
32 }
33
34 void DFS(int now)
35 {
36     for(int i=1;i<logn;i++)
37     {
38         if(deep[now]<1<<i)
39          break;
40         father[now][i]=father[father[now][i-1]][i-1];
41         ans[now][i]=max(ans[now][i-1],ans[father[now][i-1]][i-1]);
42     }
43     for(int i=begin[now];i!=-1;i=E[i].next)
44      if(E[i].b!=father[now][0])
45      {
46          father[E[i].b][0]=now;
47          ans[E[i].b][0]=E[i].weight;
48          deep[E[i].b]=deep[now]+1;
49          DFS(E[i].b);
50      }
51 }
52
53 int lca(int a,int b)
54 {
55     int ret=-inf;
56     if(deep[a]<deep[b])
57      swap(a,b);
58     int t=deep[a]-deep[b];
59     for(int i=0;i<logn;i++)
60      if(t&1<<i)
61       ret=min(ret,ans[a][i]),a=father[a][i];
62     for(int i=logn-1;i>=0;i--)
63      if(father[a][i]!=father[b][i])
64      {
65          ret=min(ret,min(ans[a][i],ans[b][i]));
66          a=father[a][i];
67          b=father[b][i];
68      }
69     if(a==b)
70      return ret;
71     return min(ret,min(ans[a][0],ans[b][0]));
72 }
73
74 int main()
75 {
76 }

tarjan//未经测试,因为之前写得实在是太丑了临时写的...

  1 #include<iostream>
  2 #include<stdio.h>
  3 #include<string.h>
  4 #include<cstdlib>
  5 #include<algorithm>
  6 #define N 100005
  7 using namespace std;
  8 int n;
  9 int begin[N];
 10 int cnt;
 11 int t;
 12 int dfn[N],low[N],flag[N];
 13 int num[N],begin_[N],cnt_,color[N];
 14
 15 struct edge
 16 {
 17     int b,next;
 18 }E[N*2],E_[N*2];
 19
 20 void addedge(int a,int b)
 21 {
 22     E[cnt].b=b;
 23     E[cnt].next=begin[a];
 24     begin[a]=cnt;
 25     cnt++;
 26 }
 27
 28 void addedge_(int a,int b)
 29 {
 30     E_[cnt].b=b;
 31     E_[cnt].next=begin_[a];
 32     begin_[a]=cnt_;
 33     cnt_++;
 34 }
 35
 36 class Stack
 37 {
 38 private:
 39     int rear;
 40     int stack[N];
 41 public:
 42     Stack()
 43     {
 44         rear=-1;
 45     }
 46     void Enstack(int x)
 47     {
 48         rear++;
 49         stack[rear]=x;
 50     }
 51     int Destack()
 52     {
 53         int x=stack[rear];
 54         rear--;
 55         return x;
 56     }
 57     int Getsize()
 58     {
 59         return rear+1;
 60     }
 61     int Getrear()
 62     {
 63         return stack[rear];
 64     }
 65 }ms;
 66
 67 void DFS(int now)
 68 {
 69     ms.Enstack(now);
 70     low[now]=dfn[now]=t;
 71     t++;
 72     flag[now]=1;
 73     for(int i=begin[now];i!=-1;i=E[i].next)
 74     {
 75         if(flag[E[i].b]==0)
 76         {
 77             DFS(E[i].b);
 78             low[now]=min(low[now],low[E[i].b]);
 79         }
 80         else low[now]=min(low[now],dfn[E[i].b]);
 81     }
 82     flag[now]=0;
 83     if(dfn[now]==low[now])
 84     {
 85         int thi=-1;
 86         while(thi!=now)
 87         {
 88             thi=ms.Destack();
 89             num[cnt_]++;
 90             color[thi]=cnt_;
 91         }
 92         cnt_++;
 93     }
 94 }
 95
 96 void rebuilt(int now)
 97 {
 98     for(int i=0;i<n;i++)
 99      for(int j=begin[i];j!=-1;j=E[j].next)
100       if(color[i]!=color[E[j].b])
101        addedge_(color[i],color[E[j].b]);
102 }
103
104 //割点dfn[now]<=low[E[i].b]
105 //桥dfn[now]<low[E[i].b]
106
107 int main()
108 {
109
110 }

马拉车//貌似noip是不会考的,字符串部分似乎是只考hash和一点点kmp,hash....虽然没写过还是有信心写对的,主要是没有遇到过需要用hash的题//或者遇到了没考虑过写hash...

 1 #include<iostream>
 2 #include<string.h>
 3 #include<cstdlib>
 4 #include<stdio.h>
 5 #include<algorithm>
 6 #define N 1000005
 7 using namespace std;
 8 int answer[N*2];
 9 char S[N];
10 char ms[N*2];
11
12 void Manacher(char *s)
13 {
14     int len=strlen(s);
15     int l=0;
16     ms[l++]='$',ms[l++]='#';
17     for(int i=0;i<len;i++)
18     {
19         ms[l++]=s[i];
20         ms[l++]='#';
21     }
22     ms[l]=0;
23     int mx=0,id=0;
24     for(int i=0;i<l;i++)
25     {
26         if(mx<=i)
27          answer[i]=1;
28         else answer[i]=min(answer[id*2-i],mx-i);
29         while(ms[i+answer[i]]==ms[i-answer[i]])
30          answer[i]++;
31         if(i+answer[i]>mx)
32         {
33             mx=i+answer[i];
34             id=i;
35         }
36     }
37 }
38
39 int main()
40 {
41 }

//其实这就是担心明天考试前突然忘了这些怎么写,U盘又不能用脑读....

//早点睡,UPUP

转载于:https://www.cnblogs.com/zyx45889/p/6079552.html

noip2016考前模板相关推荐

  1. NOIP2016考前做题(口胡)记录

    NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...

  2. 使用计算机中名为专业型信函的模板创建一份新word文档.,2016年职称计算机考试word2003考前训练题及答案3...

    多选题 答案: 1.在下列视图中有那些视图是可以使用Word2000"即点即输"功能 A 普通视图 B 大纲视图 C Web版式视图 D 页面视图 答案:BC 2.在Windows ...

  3. JZOJ 4676. 【NOIP2016提高A组模拟7.21】模板串

    Description 科学家温斯顿从数据库中找到了一串相当长的字符串. 他正试图用一个模板串来重构这个字符串. 他可以将模板串复制多份,通过合适的方式拼接起来,使得最终的串与原串一致. 如果两个模板 ...

  4. 分解例题及解析_【高考物理】考前梳理,高中物理经典常考例题(带解析),收藏起来考试不低于90+!...

    物理应该是理综里最让同学们头疼的一科.最后的压轴大题更是让很多人不知道该怎么下手,题型复杂难理解,简直是丢分"小能手". 别怕!学姐来拯救你们了!高中物理经典常考例题(带解析),考 ...

  5. 2020公文格式模板及范文_四六级考试答题顺序推荐 2020四级作文预测 四级作文范文模板...

    今年受疫情影响,四六级延迟到7月份及9月份,分两次考试,还有明天一天的时间,作文要不要再加把劲,多拿几分,有些注意事项考前再看看,对你绝对有帮助!今天小编还给大家分享了谭剑波2020年7月英语四级作文 ...

  6. 项目管理知识体系指南_MP考前冲刺丨项目管理知识体系指南(PMBOK)串讲(11)...

    第一单元:必考知识点 08 项目质量管理(下) 根本原因分析 因果图 因果图 Cause and Effect Diagram 根本原因分析 在被视为特殊偏差的不良结果与飞随机原因之间建立联系,基于这 ...

  7. 【CSP考前复习】关于考试时的注意事项

    一.关于暴力 1.为什么要打暴力--得分 这不废话吗考试的时候不打暴力等着爆零吗嘤嘤嘤 首先,我们要明确打暴力是一件非常正确且有用的事: 第一,如果最后想不出正解,暴力的分数拿到手一般也能获得不低的成 ...

  8. 信息系统项目管理师考前建议

    考前建议:可以报马军老师的课程,在淘宝直接搜索就可以找到 打算考这个证书前,去看了知乎上很多人的帖子,都说他会开黄腔,也有些犹豫.报班之后发现老师收敛很多了,一个视频最多就一两个不合时宜的玩笑,不过他 ...

  9. lle算法c++语言,2015年计算机二级C++上机考前冲刺题(4)

    一.选择题(每小题1分,共40分) 1.有如下程序: #include using namespace std: class Base{ protected: Base(){cout class De ...

最新文章

  1. Java 二分法查找
  2. 【每日一算法】删除排序数组中的重复项
  3. 国外的开源的CMS汇总(转载)
  4. OpenCV全向相机校准Omnidirectional Camera Calibration
  5. 对于scanf的使用一点体会心得
  6. oozie与hue整合 执行WC案例报错: 连接10020端口被拒绝
  7. 【计算机网络】分组交换网中的时延,丢包和吞吐量
  8. C#递归遍历指定目录下文件和文件夹
  9. Golang 中 RSA 算法的使用
  10. python中支持双向索引的有哪些_解决Python中展示tkinter不支持的图片格式
  11. WebRTC + JsSIP + freeSWITCH一对一视频聊天
  12. 计算机英语教程第6版,计算机英语教程(第6版)
  13. CAN 总线的常用拓扑
  14. rx6600怎么样 rx6600显卡相当于什么n卡
  15. 4K、2K、1080p、720p、480p、240p常见视频清晰度
  16. cv2.warpAffine 参数详解
  17. 7-基本数据类型和复合数据类型(引用数据类型)
  18. Excel怎么把数字样式日期转为标准日期格式
  19. Microsoft .NET Framework 3.5 sp1离线安装(DotNetFX35)
  20. vue 返回刷新页面 不keepAlive

热门文章

  1. 箭头函数可被打印却不能调用_5种应该避免使用箭头函数的情况
  2. 哈夫曼编码译码 C语言,【求助】严蔚敏版数据结构 哈夫曼编码译码
  3. linux下修改组的密码,Linux用户和组的操作(八) 修改用户密码 passwd
  4. 这40个linux命令,提高工作效率
  5. 防火墙简单组网方案之双机热备
  6. ubuntu16搭建z-blog博客
  7. 具有趣味性的c语言项目,一个有趣的小程序
  8. python获取当前窗口句柄_人生苦短,我学python之python+selenium 多窗口、句柄(handle)...
  9. 【杂谈】一个五岁孩子妈妈在有三AI学习并且赚钱的故事
  10. 中国呼吸道防护劳保用品市场投资效益与销售前景调研报告2022年