一只小蒟蒻备考蓝桥杯的日志
笔记
map
map< const Key, V> ,Key为键类型,V为键所关联的值的类型
map对象中一个给定键只对应一个元素。如果试图插入的元素所对应的键已经在容器中,则insert 将不做任何操作。
传递给insert 的实参相当笨拙,可用make_pair 方式简化:
map<string, int> word_count
word_count.insert(make_pair("Anna",1));
备份一下第5题demo
#include <stdio.h>
#include <iostream>
using namespace std;
int N;
int mp[105][105];
int mov[10][3] = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1}};
//direct对应mov左[]下标,排序方向
//1:右 2:下 3:上 4:左
//5:右下 6:左上 7:右上 8:左下
int saved[200][5];
//右边[], [0]=direct, [1]=start_x, [2]=start_y
char character[] = {'y', 'i', 'z', 'h', 'o', 'n', 'g'};
int CNT = 7; //yizhong
//direct=-1, 无方向性
int ans = 0;
void DFS(int x, int y, int direct, int cnt, int sx, int sy) {
if(CNT == cnt + 1) {
saved[ans][0] = direct;
saved[ans][1] = sx;
saved[ans][2] = sy;
ans++;
return;
}
if(direct == -1) { //无方向性
for(int i = 0; i < 8; i++) {
int x1 = x + mov[i][0];
int y1 = y + mov[i][1];
if(x1 < 0 || x1 >= N || y1 < 0 || y1 >= N) {
continue;
}
if(mp[x][y] == character[0]) {
if(mp[x1][y1] == character[1]) {
DFS(x1, y1, i, 2, x, y);
}
}
DFS(x1, y1, -1, 0, 0, 0);
}
} else {
int x1 = x + mov[direct][0];
int y1 = y + mov[direct][1];
if(x1 < 0 || x1 >= N || y1 < 0 || y1 >= N) {
return;
}
if(mp[x1][y1] != character[cnt]) {
return;
}
DFS(x1, y1, direct, cnt + 1, sx, sy);
}
return;
}
int main() {
cin >> N;
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
scanf("%c", &mp[i][j]);
}
}
DFS(0, 0, -1, 0, 0, 0);
cout << ans << endl;
return 0;
}
//我顾虑的是自作聪明的direct会不会导致无法全部遍历
//以及return条件不成熟
刷题
心得
- 因为每个练习都要写,相当于不需要 used 判断,DFS变种(简化版)但是影响到我后面的认知了,,我后面以为不用 for 循环…
- 第2题不知道为什么死活过不了
- 第3题,常规操作,easy的,一把过
- 第4题走迷宫,蠢死我了啊啊啊(尖叫),我傻不拉几还坚定不移地认为一定要把所有位置走一遍而且不重复而且正好走到出口
DFS:你有病啊 - 还没做出来,明天(2024年3月17日)一定
小结
写了四个半小时,,那个迷宫卡我一个小时我恨(¬︿̫̿¬☆)
至少现在可以辨别DFS还是BFS的选择了,捂脸笑,,,
今天的剩下时间要写前端了,告辞,,
也算是,,哇趣,怎么才四个半小时,,我都不好意思说是很努力的一天呜呜呜
“业精于勤荒于嬉,行成于思毁于随”
小蒟蒻一个月,冲省一!