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;
}