Home avatar

白衣苍狗

初赛2——计算机科学家

在幕布中查看(密码:LAN)

  • 计算机科学家

    • 帕斯卡【法】
      • 机械计算机:加法器
    • 莱布尼茨【徳】
      • 乘法器
    • 巴贝奇【英】
      • 分析机
    • 阿达·洛芙莱斯【英】
      • 首个程序员
    • 图灵【英】
      • 同性恋
        • 死于自杀
        • 2013年被赦免
      • 图灵机
        • 停机问题
        • 通用图灵机
      • 二战中破译密码
      • 人工智能之父
        • 《机器能思考吗》
        • 图灵测试
      • 图灵奖
        • 计算机界的诺贝尔奖
    • 香农【美】
      • 信息理论、信息熵
      • 符号逻辑和开关理论
      • 《通讯的数学原理》
    • 冯·诺依曼【美籍匈牙利】
      • 原子弹
      • 博弈论
      • 计算机结构-冯诺依曼体系结构
        • 二进制
        • 程序存储
      • (死于癌症)
    • <中国>
      • 慈云桂
        • 中国巨型机之父
        • 银河-I
      • 王选
        • 汉字激光照排系统之父
        • “有市场眼光的科学家”
        • 伍豪之剑
        • 科教兴国,人才强国
      • 姚期智
        • 图灵奖唯一华裔计算机科学家
    • 邓尼斯•里奇 & 肯•汤姆森
      • C语言
      • 1983图灵奖
  • OI系列竞赛概况

初赛3——数学

在幕布中查看(密码:LAN)

  • 计算机数学
    • 数制
      • 转换
        • 整数
          • ->:除K取余,逆序
          • <-:加权求和
        • 小数
          • ->:乘二取整,顺序
          • <-:加权求和
      • 计算
    • 数据存储
      • 机器数
        • 真值
        • 原码
          • 最高位为符号位
        • 反码
          • 正数:=原码
          • 负数:=原码符号位不变,其余位取反
        • 补码
          • 正数:=原码
          • 负数:=反码+1
          • n位补码表示范围:[-2^(n-1),2(n-1)-1]
          • 原码+补码=模
          • 补码的补码=原码
      • 小数
        • 定点数
          • 小数点在符号位后
        • 浮点数
          • 阶码
          • 尾数
          • 规格化
      • ASCII码
      • BCD码
    • 逻辑运算
      • 创立
        • 乔治·布尔【英】
      • 基本运算
        • 与∧/·
        • 或∨/+
        • 非¬
        • 公式
          • 变量与常量关系
            • A+1=1
            • A+0=A
            • A·1=A
            • A·0=0
          • 重叠律
            • A+A=A
            • A·A=A
          • 互补律
            • A+(¬A)=1
            • A·(¬A)=0
          • 交换律
            • A+B=B+A
            • A·B=B·A
          • 结合律
            • A+(B+C)=(A+B)+C
            • A·(B·C)=(A·B)·C
          • 分配律
            • A·(B+C)=A·B+A·C
            • A+(B·C)=(A+B)·(A+C)
          • 反演律
            • ¬(A+B)=(¬A)·(¬B)
            • ¬(A·B)=(¬A)+(¬B)
          • 还原律
            • ¬(¬A)=A
          • 吸收律
            • A·(A+B)=A
            • A+(A·B)=A
      • 复合运算
        • 同或⊙
        • 异或⊕
        • 公式
          • 变量与常量关系
            • A⊙0=¬A
            • A⊙1=A
            • A⊕0=A
            • A⊕1=¬A
          • 互补律
            • A⊙(¬A)=0
            • A⊕(¬A)=1
          • 重叠律
            • A⊙A=1
            • A⊕A=0
          • 调换律
            • A⊙B=C <=> A⊙C=B <=> B⊙C=A
            • A⊕B=C <=> A⊕C=B <=> B⊕C=A
      • 表示方法
        • 真值表
        • 卡诺图
    • 排列组合
      • 圆周排列
        • Q(n,m)=A(n,m)/m=n!/[m(n-m)!]
        • n=m时:N=(n-1)!
      • 错排
        • D(n) = (n-1) [D(n-2) + D(n-1)]
        • D(1)=0,D(2)=1
        • D(n) = n! [(-1)^2/2! + … + (-1)^(n-1)/(n-1)! + (-1)^n/n!].
        • D(n)=n*D(n-1)+(-1)^n
      • 可重组合
        • 在n个不同元素中取m个可以重复的组合
        • 无限
          • =C(n+m-1,m)
          • (x+y+z)^n的项数=C(n+3-1,n)
        • 有限
          • =n!/(a1!*a2!*…*ak!)
      • 不相邻组合
        • 从A={1,2,…n}取m个不相邻的数的组合
        • =C(n-m+1,m)
      • 卡特兰数Catalan
        • 式子
          • h(1)=1
          • h(n)=h(1)*h(n-1)+h(2)*h(n-2)+…+h(n-1)*h(1)
          • h(n)=h(n-1)*(4n-2)/(n+1)
          • h(n)=C(2n,n)/(n+1)=C(2n,n)-C(2n,n-1)
        • 直接应用
          • 括号化
          • 两排站队
          • 剧院买票找零(10/5)
          • 出栈次序
          • 多边形划分三角形
          • 给定顶点组成二叉树
          • 方格行走不穿越对角线
          • 二进制有n个1的方案数
      • 第二类斯特林数
        • 将n个不同的元素分成m个集合的方案数
        • S(n+1,m)=S(n,m-1)+m*S(n,m)
        • S(n,0)=0
        • S(n,1)=1
        • S(n,n)=1
      • 抽屉原理
    • 约瑟夫问题
      • N=2:
        • k=log2(N),x=2*(N-2^k)+1
      • N=n: 从0开始编号​f[1]=0;f[i]=(f[i-1]+m) mod i; (i>1)​
    • 表达式
      • 前缀表达式
      • 中缀表达式
      • 后缀表达式
      • 表达式转换
    • 千禧难题
      • P,NP,NPC
        • P:所有可以在多项式时间内求解的判定问题构成P类问题。判定问题:判断是否有一种能够解决某一类问题的能行算法的研究课题。
        • NP:所有的非确定性多项式时间可解的判定问题构成NP类问题。非确定性算法:非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。
        • NPC:P=NP? NP中的某些问题的复杂性与整个类的复杂性相关联.这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的.这些问题被称为NP-完全问题(NPC问题)。
      • 霍奇猜想
      • 庞加莱猜想
      • 黎曼假设
      • 杨-米尔斯存在性和质量缺口
      • 纳维叶-斯托克斯方程的存在性与光滑性
      • 贝赫和斯维讷通-戴尔猜想

初赛4——网络

在幕布中查看(密码:LAN)

  • 网络

    • 首个计算机网络:1969Arpanet,是Internet的前身

    • 分类

      • 拓扑结构
        • 星型,环型,总线,分布,树型,网状,蜂窝
      • 规模
        • 局域网,城域网,广域网
    • 协议与模型

      • OSI参考模型
        • 结构
          • 物理层:光纤、同轴电缆、双绞线、中继器和集线器
            • 最重要、最基础的一层,它建立在传输媒介基础上,起建立、维护和取消物理连接作用,实现设备之间的物理接口。物理层之接收和发送一串比特(bit)流,不考虑信息的意义和信息结构。
          • 数据链路层:二层交换机、网桥、网卡
            • 将比特信息封装成数据帧Frame,起到在物理层上建立、撤销、标识逻辑链接和链路复用以及差错校验等功能。通过使用接收系统的硬件地址或物理地址来寻址。建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,同时为其上面的网络层提供有效的服务。
            • 在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
          • 网络层:网关、路由器
            • 用于控制通信子网的操作,是通信子网与资源子网的接口。
            • IP地址
          • 传输层
            • 为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务
          • 会话层
            • 会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
          • 表示层
            • 表示层是为在应用过程之间传送的信息提供表示方法的服务,它关心的只是发出信息的语法与语义。表示层要完成某些特定的功能,主要有不同数据编码格式的转换,提供数据压缩、解压缩服务,对数据进行加密、解密。例如图像格式的显示,就是由位于表示层的协议来支持。
          • 应用层
            • 网络应用层是通信用户之间的窗口,为用户提供网络管理、文件传输、事务处理等服务。其中包含了若干个独立的、用户通用的服务协议模块。
      • TCP/IP(传输控制协议)参考模型
        • 结构:
          • 网络接口层
            • 主机必须使用某种协议与网络相连。
          • 网络层
            • 使主机可以把分组发往任何网络,并使分组独立地传向目标。
          • 传输层
            • 源端和目的端机器上的对等实体可以进行会话。(TCP/IP)
          • 应用层
            • 包含高层协议(TELNET、FTP、SMTP、DNS、NNTP、HTTP)
        • TCP
          • 可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性
          • 传输层
        • IP(网协)
          • IPv4
            • 地址长32位
            • 表示:每八位一段十进制
            • 分类
              • A:1.0.0.0—126.0.0.0
              • B:128.0.0.0—191.255.0.0
              • C:192.0.0.0—223.255.255.0
              • D:224.0.0.0—239.255.255.255
              • E:240.0.0.0—255.255.255.254
          • IPv6
            • 地址长128位
            • 表示:每十六位一段十六进制
        • UDP
          • 面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
        • 域名
      • FTP
      • SMTP
      • POP3
    • 网络安全

动态规划——多进程DP

动态规划——多进程DP

luogu1004

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
luogu1004
多进程DP 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
template<typename T>
T Max(const T& a,const T& b){return a>b?a:b;}
template<typename T>
void read(T& w)
{
	char r;int f=1;
	for(r=getchar();(r<48||r>57)&&r!='-';r=getchar());
	if(r=='-')r=getchar(),f=-1;
	for(w=0;r>=48&&r<=57;r=getchar())w=w*10+r-48;
	w*=f;
}
const int maxn=13;
int n;
int a[maxn][maxn];
void input()
{
	read(n);
	int x,y,z;
	for(read(x),read(y),read(z);x||y||z;read(x),read(y),read(z))
	{
		a[x][y]=z;
	}
}

int f[maxn][maxn][maxn][maxn];
void dp()
{
	for(int i=1;i<=n;++i) for(int j=1;j<=n;++j)
	{
		for(int k=1;k<=n;++k) for(int l=1;l<=n;++l)
		{
			f[i][j][k][l]
			=Max(
				Max(
					f[i-1][j][k-1][l],f[i-1][j][k][l-1]),
				Max(
					f[i][j-1][k-1][l],f[i][j-1][k][l-1])
				);
			f[i][j][k][l]+=a[i][j];
			if(i!=k||j!=l)
				f[i][j][k][l]+=a[k][l];
			//cout<<f[i][j][k][l]<<" ";
		}
	}
}
int main()
{
	freopen("luogu1004_1.in","r",stdin);
	//freopen("luogu1004.out","w",stdout);
	input();
	dp();
	printf("%d\n",f[n][n][n][n]);
	return 0;
}

luogu1006

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
luogu1006
多进程DP 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
template<typename T>
T Max(const T& a,const T& b){return a>b?a:b;}
template<typename T>
void read(T& w)
{
	char r;int f=1;
	for(r=getchar();(r<48||r>57)&&r!='-';r=getchar());
	if(r=='-')r=getchar(),f=-1;
	for(w=0;r>=48&&r<=57;r=getchar())w=w*10+r-48;
	w*=f;
}
const int maxn=53;
int n,m;
int a[maxn][maxn];
void input()
{
	read(n),read(m);
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
		{
			read(a[i][j]);
		}
	}
}

int f[maxn][maxn][maxn][maxn];
void dp()
{
	for(int i=1;i<=n;++i) for(int j=1;j<=m;++j)
	{
		for(int k=1;k<=n;++k) for(int l=1;l<=m;++l)
		{
			f[i][j][k][l]
			=Max(
				Max(
					f[i-1][j][k-1][l],f[i-1][j][k][l-1]),
				Max(
					f[i][j-1][k-1][l],f[i][j-1][k][l-1])
				);
			f[i][j][k][l]+=a[i][j];
			if(i!=k||j!=l)
				f[i][j][k][l]+=a[k][l];
			//cout<<f[i][j][k][l]<<" ";
		}
	}
}
int main()
{
	freopen("luogu1006_1.in","r",stdin);
	//freopen("luogu1006.out","w",stdout);	
	input();
	dp();
	printf("%d\n",f[n][m][n][m]);
	return 0;
}

堆排序模板

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

template<typename T>
void Swap(T& a,T& b){T t=a;a=b;b=t;}

template<typename T>
void shift(T* ary,int k,int f,bool comp(const T& a,const T&b) )
{
	for(int son=k*2;son<=f;k=son,son=k*2)
	{
		if(son+1<=f&&comp(ary[son+1],ary[son]))
			++son;
		if(comp(ary[son],ary[k]))
			Swap(ary[son],ary[k]);
		else break;
	}
}

template<typename T>
void heapSort(T* ary,int l,int r,bool comp(const T& a,const T&b))//r不是超尾而是最后一个元素 
{
	int mid=(l+r)/2;
	for(int i=mid;i>=l;--i)
		shift(ary,i,r,comp);
	for(int i=r;i>=l+1;--i)
	{
		Swap(ary[i],ary[l]);
		shift(ary,l,i-1,comp);
	}
}

也谈八数码境界

也谈八数码境界

题意

​ 给定一个九宫格起始状态,其中八格放置1~8,有一格为空。空格可以和毗邻的格子交换,一次交换称为一次操作,求达到目标状态所需的最小字典序的最少操作次数及方案。

输入输出效率对比

输入输出效率对比

前言

在OI竞赛中,几乎每道题都需要进行文件的读写操作。然而在非常紧的时间限制内,读写的时间也至关重要。目前可供使用的标准输入输出操作有如下几种:

队列

队列

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<typename T,int maxnode>
struct QUE
{
	T ary[maxnode];
	int f,t;
	int cnt;
	QUE(){f=t=cnt=0;}
	void clear(){f=t=cnt=0;}
	bool empty(){return cnt==0;}
	void push(const T& w)//if t+1!=f
	{
		ary[t++]=w;
		if(t==maxnode)t=0;
		++cnt;
	}
	T front(){return ary[f];}
	void pop()
	{
		++f;
		if(f==maxnode)f=0;
		--cnt;
	}
};

Tarjan——强连通分量&最近公共祖先(LCA)

Tarjan——强连通分量&最近公共祖先(LCA)

  • 写在前面:这是我高二时给高一学弟学妹们唯二的讲课之一。时光荏苒,如今我早已AFO,将讲课内容整理如下,也为了纪念共同奋斗于OI的那些人,那些时光。
  • 写在前面的后面:时间仓促,不甚严谨,难免纰漏,敬请指正。
  • 写在前面的后面的后面:下文中的一些概念可能并没有严谨的依据,只是我为了方便理解构造的,还请谅解。

今天我们来讲讲Tarjan的两个算法:求最近公共祖先和强连通分量。

0%