ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AcWing第15场周赛题解

2022-04-11 16:01:08  阅读:133  来源: 互联网

标签:周赛 15 题目 int 题解 ++ maxn && return


A. 3826. 青蛙跳

题目链接:https://www.acwing.com/problem/content/3829/

题目大意:略。

解题思路:简单数学题。

示例程序:

#include <bits/stdc++.h>
using namespace std;

int T;
long long a, b, k;

int main() {
    cin >> T;
    while (T--) {
        cin >> a >> b >> k;
        cout << (k+1)/2 * a - k/2*b << endl;
    }
    return 0;
}

B. 3827. 最小正整数

题目链接:https://www.acwing.com/problem/content/3830/

题目大意:略。

解题思路:设 \(n'\) 为 \(n\) 整除去最多 \(k\) 个因子 \(2\),同时整除去最多 \(k\) 个因子 \(5\) 的结果。则答案为 \(n' \times 10^k\)。

示例程序:

#include <bits/stdc++.h>
using namespace std;

int T, n, k;

int main() {
    cin >> T;
    while (T--) {
        cin >> n >> k;
        for (int i = 0; i < k && n%2==0; i++, n/=2);
        for (int i = 0; i < k && n%5==0; i++, n/=5);
        cout << n;
        for (int i = 0; i < k; i++) cout << 0;
        cout << endl;
    }
    return 0;
}

C. 3828. 行走路径

题目链接:https://www.acwing.com/problem/content/3831/

题目大意:搜索。第一轮搜索判环,第二轮搜索求最大轮次。

解题思路:判断+搜索。这题和第13场周赛的第3题非常相似。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;

int _n, _m, n;
char s[maxn][maxn];
int dir[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};

bool in_map(int x, int y) {
    return x >= 0 && x < _n && y >= 0 && y < _m;
}

int getid(int x, int y) {
    return x * _m + y + 1;
}

bool cango(char a, char b) {
    return a=='Q' && b=='W' || a=='W' && b=='E' || a=='E' && b=='R' || a=='R' && b=='Q';
}

vector<int> g[maxn*maxn], r[maxn*maxn];
int in[maxn*maxn], out[maxn*maxn], cnt, f[maxn*maxn];
bool vis[maxn*maxn];
queue<int> que;

void initg() {
    scanf("%d%d", &_n, &_m);
    for (int i = 0; i < _n; i++) scanf("%s", s[i]);
    n = _n * _m;
    for (int i = 0; i < _n; i++) {
        for (int j = 0; j < _m; j++) {
            int u = getid(i, j);
            for (int k = 0; k < 4; k++) {
                int x = i + dir[k][0], y = j + dir[k][1];
                int v = getid(x, y);
                if (in_map(x, y) && cango(s[i][j], s[x][y])) {
                    g[u].push_back(v);
                    r[v].push_back(u);
                    out[u]++;
                    in[v]++;
                }
            }
        }
    }
}

int dfs(int u) {
    if (f[u]) return f[u];
    f[u] = 1;
    for (auto v : g[u])
        f[u] = max(f[u], dfs(v)+1);
    return f[u];
}


int main() {
    initg();
    // 判断是否存在环
    for (int i = 1; i <= n; i++) {
        if (!in[i] || !out[i]) {
            vis[i] = true;
            cnt++;
            que.push(i);
        }
    }
    while (!que.empty()) {
        int u = que.front();
        que.pop();
        if (!in[u]) {
            for (auto v : g[u]) {
                in[v]--;
                if (!in[v] && !vis[v]) {
                    vis[v] = true;
                    cnt++;
                    que.push(v);
                }
            }
        }
        else {
            for (auto v : r[u]) {
                out[v]--;
                if (!out[v] && !vis[v]) {
                    vis[v] = true;
                    cnt++;
                    que.push(v);
                }
            }
        }
    }
    if (cnt < n) {  // 存在环
        puts("infinity");
        return 0;
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
        if (s[(i-1)/_m][(i-1)%_m] == 'Q')
            ans = max(ans, dfs(i));
    ans /= 4;
    if (!ans) puts("none");
    else printf("%d\n", ans);
}

标签:周赛,15,题目,int,题解,++,maxn,&&,return
来源: https://www.cnblogs.com/quanjun/p/16130340.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有