1.在字符串中找出连续最长的数字串
思路:
简单双指针,随便怎么暴力
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std; int main() { string str; cin >> str; int ans = 0; int star = 0; for (int i = 0; i < str.size(); i++) { if (str[i] >= '0' && str[i] <= '9') { int j = i; while (j < str.size() && str[j] >= '0' && str[j] <= '9') { j++; } if (j - i > ans) { star = i; ans = j - i; } i = j; } } cout << str.substr(star, ans); return 0; }
2.岛屿数量
思路:
还以为是去年蓝桥杯的原题,后来发现不是,本题不需要判断子岛屿问题。所以又是直接bfs就行,每次bfs把相邻的岛屿”染色“一遍,记录答案就行。
有兴趣的同学可以去看我写的14届蓝桥杯的题解,里面有这道题进阶的解法
代码:
#define _CRT_SECURE_NO_WARNINGS 1 const int N = 210; typedef pair<int, int> PII; bool st[N][N]; int dx[] = { 0,0,-1,1 }; int dy[] = { -1,1,0,0 }; int m, n; class Solution { public: void bfs(int x, int y, vector<vector<char> >& grid) { queue<PII> q; q.push({ x,y }); st[x][y] = true; while (!q.empty()) { auto it = q.front(); q.pop(); int aa = it.first; int bb = it.second; for (int i = 0; i < 4; i++) { int a = aa + dx[i]; int b = bb + dy[i]; if (a >= 0 && a < m && b >= 0 && b < n && !st[a][b] && grid[a][b] == '1') { st[a][b] = true; q.push({ a,b }); } } } } int solve(vector<vector<char> >& grid) { m = grid.size(); n = grid[0].size(); int ans = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (!st[i][j] && grid[i][j] == '1') { ans++; bfs(i, j, grid); } } } return ans; } };
3.拼三角
思路:
数据范围很小,怎么暴力怎么来。用dfs枚举出所有棍子的排列组合,将前三根和后三个根棍子分别判断能否组成一个三角形就OK了。
纯粹的手速题,一遍过。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<cstring> #include<vector> using namespace std; int a[6] = { 0 }; bool st[6]; bool ans; bool is_triangle(int a, int b, int c) { if (a + b <= c || a + c <= b || b + c <= a)return false; return true; } void dfs(int u, vector<int> t) { if (u == 6) { if (is_triangle(t[0], t[1], t[2]) && is_triangle(t[3], t[4], t[5]))ans = true; return; } for (int i = 0; i < 6; i++) { if (st[i])continue; st[i] = true; t.push_back(a[i]); dfs(u + 1, t); st[i] = false; t.pop_back(); } } int main() { int t; cin >> t; while (t--) { ans = false; memset(st, 0, sizeof st); for (int i = 0; i < 6; i++)cin >> a[i]; vector<int> t; dfs(0, t); if (ans)cout << "Yes\n"; else cout << "No\n"; } return 0; }