• AcWing第18场周赛题解


    A. 3988. 不同的数

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

    题目大意:从n个数中找出k个不同的数,输出下标。

    解题思路:用 set 记录有没有出现过,用 vector 保存数据。

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    
    int n, k, a, cnt;
    set<int> st;
    vector<int> vec;
    
    int main() {
        cin >> n >> k;
        for (int i = 1; i <= n; i++) {
            cin >> a;
            if (!st.count(a)) {
                st.insert(a);
                vec.push_back(i);
                cnt++;
                if (cnt == k) {
                    cout << "YES" << endl;
                    for (auto e : vec) cout << e << " ";
                    return 0;
                }
            }
        }
        cout << "NO" << endl;
        return 0;
    }
    

    B. 3989. 看图做题

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

    题目大意:看图做题。

    解题思路:找规律。(根据 \(1 \rightarrow 13 \rightarrow 37\) 找了以下规律然后就过了,见代码)

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    
    int n, m;
    
    int main() {
        cin >> n;
        m = 1;
        for (int i = 2; i <= n; i++)
            m += (i - 1) * 12;
        cout << m << endl;
        return 0;
    }
    

    C. 3990. 砍树

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

    题目大意:一棵树,且尽量多的边,使得剩下的连通块都包含偶数个点。

    解题思路:以节点 \(1\) 为根节点 dfs 一遍求出所有 \(sz_i\) 表示以 \(i\) 为根节点的子树大小。则对于任意 \(i \ge 2\)\(sz_i\) 为偶数的点,都可以删除 \(i\) 连向其父节点的那条边。

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    
    int n, sz[maxn], cnt;
    vector<int> g[maxn];
    
    void dfs(int u, int p) {
        sz[u] = 1;
        for (auto v : g[u])
            if (v != p)
                dfs(v, u), sz[u] += sz[v];
    }
    
    int main() {
        cin >> n;
        for (int i = 1; i < n; i++) {
            int u, v;
            cin >> u >> v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        if (n % 2) {
            cout << -1 << endl;
            return 0;
        }
        dfs(1, -1);
        for (int i = 2; i <= n; i++)
            if (sz[i] % 2 == 0)
                cnt++;
        cout << cnt << endl;
        return 0;
    }
    
  • 相关阅读:
    Java当中的IO
    Java当中的类集框架
    Java当中的JVM
    Java当中的常量池
    详细讲解String和StringBuffer和StringBuilder的使用
    Java中流的操作以及编码解码
    VMware-workstation12.5.6 新建虚拟机 安装 centos6.5
    linux 常用命令
    macos 下安装brew
    mysql 的一些事
  • 原文地址:https://www.cnblogs.com/quanjun/p/16130930.html
Copyright © 2020-2023  润新知