计网概述
1.2.1 网络的网络
计算机网络:若干节点和连接这些节点的链路组成
节点可以是计算机、集线器、交换机或路由器等
互连网:多个网络通过一些路由器相互连接,构成更大的网络与网络相连的计算机称为主机;
网络:把许多计算机连接一起;
互联网:连接+信息传输与处理;连通性和资源共享;
1.2.2 互联网基础结发展的三个阶段
第一阶段 1969-1990
ARPANET:最初只是一个单个的分组交换网,不是互连网;
1983 TCP/IP协议成为标准协议,所有使用此协议的计算机可利用互连网相互通信,1983年作为互联网诞生的时间;
1990关闭
第二阶段 1985-1993
国家科学基金网NSFNET;
三级结构:主干网、地区网、校园网(企业网)
覆盖了全美国主要大学和研究所,成为互联网主要组成部分
第三阶段1993
互联网服务提供者ISP:
提供接入到互联网的服务;
收取费用;
多层次ISP结构:
主干ISP地区、地区ISP、本地ISP
覆盖面积大小和所拥有的IP地址数目的不同
互联网交换点IXP:允许两个网络直接相连并快速交换分组
常采用工作在数据链路层的网络交换 ...
数论
数论
组合数
12345678910111213#include<bits/stdc++.h>using namespace std;#define ll long long#define MAX 1000#define MOD 100000007ll c[MAX][MAX];ll C(int a,int b){ if(c[a][b]) return c[a][b]; c[a][b]=(C(a-1,b-1)+C(a-1,b)) % MOD; return c[a][b];}
逆元
12345678910111213141516171819#define MOD 998244353// 求快速幂long long qpow(long long a, int b){ long long ans = 1; while (b) { if (b & 1) ans = (ans * a) % MOD; a = a * a % MOD; ...
字符串
字符串
字符串匹配
允许失配3次的字符串匹配
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include<bits/stdc++.h>using namespace std;typedef unsigned long long ULL;//自然溢出,这道题没被卡哇哈哈const int N=100000+3,D=233;int n,m,T,ans;char a[N],b[N];ULL p[N],f[N],g[N];inline ULL ask(ULL*f,int l,int r){//[l,r]的哈希值 return f[r]-f[l-1]*p[r-l+1]; }inline int lcp(int x,int y,int r){ int l=1,mid,t=0; while(l<=r){//二分查找(这个东西可以让一个机房的人吵起来) mid=(l+r)>> ...
FFT模板
FFT
位逆序置换
1234567891011121314151617181920212223242526272829303132333435363738#include <bits/stdc++.h>using namespace std;const double PI = acos(-1.0);struct Complex{ double real, imag;};void change(Complex y[], int len){ for (int i = 1, j = len / 2, k; i < len - 1; i++) { if (i < j) swap(y[i], y[j]); k = len / 2; while (j >= k) { j = j - k; k = k / 2; } if (j < k) ...
凸包
凸包
Anderw
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include<iostream>#include<cstdio>#include<cmath>#include<algorithm> using namespace std;const int N = 1e5+10;const double eps = 1e-8;int n,top;double ans;struct point{ double x,y; point(){} point(double a,double b){x = a, y = b;}}p[N],sta[N];point operator + (point a,point b){return point(a.x+b.x,a.y+b.y);}point operator ...






