文件IO
freopen("xxx.in",stdin);
freopen("xxx.out",stdont);
题目是什么文件就写什么文件
加速器
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
加速cin/cout输出
二维数组
行列遍历
只需要看好i和j
在做二维数组的时候,最好画个下标访问图
下标访问图:
a[1,1] a[1,2] a[1,3] a[1,4]
a[2,1] a[2,2] a[2,3] a[2,4]
a[3,1] a[3.2] a[3,3] a[3,4]
a[4,1] a[4,2] a[4,3] a[4,4]
边缘
for(int i=2;i<n;i++){
for(int j=2;j<m;j++){//直接计算
……
}
}
数组初始化
方法一:
memset(a,0,sizeof(a));//值为0
方法二:
定义为全局变量
斜线
每条斜线
i-j=k1-n<=k<=n-1
i+j=k2<=k<=2*n
元素四周关系
上=a[x-1][y] 下=a[x+1][y] 左=a[x][y-1] 右=a[x][y+1]
四个方向:
int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}}; for(int i=0;i<4;i++){ x=x+dir[i][0]; y=y+dir[i][1]; }左上=a[x-1][y-1] 左下=a[x+1][y-1] 右上=a[x-1][y+1] 右下=a[x+1][y+1]
int dir[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{-1,1},{1,-1},{1,1}}; for(int i=0;i<8;i++){ x=x+dir[i][0]; y=y+dir[i][1]; }旋转矩阵
1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
a[1][1]→b[1][3] a[2][1]→b[1][2] a[1][2]→a[2][3]
a[2][2]→b[2][2] a[1][3]→b[3][3] a[2][3]→a[3][2]
……
7 | 4 | 1 |
| 8 | 5 | 2 |
| 9 | 6 | 3 |
得出公式:
顺时针90°:b[j][n+1-i]=a[i][j]
顺时针180°:b[n+1-i][m+1-j]=a[i][j]
顺时针270°:b[m+1-j][i]=a[i][j]
二维数组的回形遍历
思路:
边界情况能用bool二维数组来存放,还要判断是否超出数组大小。
dir数组:
定义按顺序,按"右,下,左,上",顺序
代码:
int a[105][105]; bool b[105][105]; int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int main(){ int n,m; cin>>n>>m; memset(b,false,sizeof(b)); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } int x=1,y=0,sum=0,fx=0; while(sum<n*m){ int dx=x+dir[fx][0]; int dy=y+dir[fx][1]; if(dx>n||dy>m||dx<1||dy<1||b[dx][dy]==true){ fx=(fx+1)%4; } x=x+dir[fx][0]; y=y+dir[fx][1]; cout<<a[x][y]<<' '; sum++; b[x][y]=true; } return 0; }递归
递归:简洁
问题能用函数描述
问题转移
边界
内存多,时间也多!
补充:一维字符数组
结构体
定义结构体
struct类型名称{//不要有()
数据类型1 成员名1;
数据类型2 成员名2;
……
}
填完后,能把它当成int ,long long来用
如:
类型名称a[105];
| 姓名 | ||||
| 班级 | ||||
| 学号 | ||||
| 1 | 2 | 3 | 4 | 5 |
输入结构体
一、
cin>>a.xm>>a.id;
二、(推荐)
int id;
string xm;
cin>>xm>>id;
a={xm,id};
结构体排序
正常:
sort(a+1,a+n+1);
结构体增加一个函数
sort(a+1,a+n+1,cmp);
函数:
bool cmp(node x,node y){
这里自己控制程序
}
运算符重载
在结构体里写:
bool operator<(node x){
这里自己控制程序
}
主函数里面只需要写
sort(a+1,a+n+1)后面不用函数来写了
有整体性就能用结构体!!!
未完待续……