【笔试训练】day7

简介: 【笔试训练】day7

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


相关文章
|
6月前
【笔试训练】day21
【笔试训练】day21
|
6月前
【笔试训练】day23
【笔试训练】day23
|
6月前
|
人工智能
【笔试训练】day20
【笔试训练】day20
|
6月前
|
算法 Shell
【笔试训练】day12
【笔试训练】day12
|
6月前
【笔试训练】day22
【笔试训练】day22
|
6月前
|
并行计算
【笔试训练】day14
【笔试训练】day14
|
6月前
【笔试训练】day16
【笔试训练】day16
|
6月前
|
人工智能 BI
【笔试训练】day24-day48合集(2)
【笔试训练】day24-day48合集(2)
|
6月前
|
人工智能
【笔试训练】day2
【笔试训练】day2