第二次比赛出题题解

第二次比赛题解

P1138 第 k 小整数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

主要了解set的用法,set会自动去重和排序

#include <bits/stdc++.h>

using namespace std;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n,k;
    cin >> n >> k;
    set<int> s;
    for(int i = 0, x ;i < n;i ++){
        cin >> x;
        s.insert(x);
    }
    if(k > s.size())
        cout << "NO RESULT" << endl;
    else{
        for(auto i : s){
            k--;
            if(k == 0){
                cout << i << endl;
                break;
            }
        }
    }


    return 0;
}

P9044 Koszulki - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

其实就是从大到小排个序之后看第k个人和后面是不是一样的,我这里从小到大排序,从后遍历也是一样的

#include <bits/stdc++.h>

using namespace std;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n,k;
    cin >> n >> k ;
    vector<int> a(n);
    for(auto &i : a) cin >> i;

    sort(a.begin(),a.end());

    int ans = 0;
    for(int i = n - k - 1;i >= 0;i --){
        if(a[i] == a[i + 1])
            ans ++;
        else
            break;
    }

    cout << ans + k << endl;

    return 0;
}

P2788 数学1(math1)- 加减算式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

每一项都保证是非负数,就不用考虑第一个数的正负性,其余跟着模拟就行

#include <bits/stdc++.h>

using namespace std;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s;
    cin >> s;

    int ans = 0;
    char op = '?';
    for(int i = 0;i < s.size();i ++){

        int num = 0;
        while(s[i] >= '0' && s[i] <= '9'){
            num  = num * 10 + s[i] - '0';
            i++;
        }

        if(op == '-')
            ans -= num;
        else
            ans += num;

        op = s[i];
    }
    cout << ans << endl;
    return 0;
}

P2084 进制转换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

注意+号的判断

#include <bits/stdc++.h>

using namespace std;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    string s;
    cin >> n >> s;

    int one = 0;
    for(int i = 0;i < s.size();i ++)
        if(s[i] != '0')
            one ++;

    for(int i = 0;i < s.size();i ++){
        if(s[i] != '0'){
            cout << s[i] << '*' << n << '^' << s.size() - i - 1;
            one--;
            if(one > 0)
                cout << '+';
        }
    }

    return 0;
}

B3642 二叉树的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

作业题的一个变型题,也怪我,当时鼠标没电了,只是用白板来展示这个遍历不好理解

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

struct Node{
    int root;
    int left,right;
};
vector<Node> tree(N);
void traversal1(int x){

    if(x == 0 ) return;
    cout << x << ' ';
    traversal1(tree[x].left);
    traversal1(tree[x].right);
};
void traversal2(int x){

    if(x == 0) return;
    traversal2(tree[x].left);
    cout << x << ' ';
    traversal2(tree[x].right);
};
void traversal3(int x){

    if(x == 0) return;
    traversal3(tree[x].left);
    traversal3(tree[x].right);
    cout << x << ' ';
};
int main() {

    int n;
    cin >> n;

    for(int i = 1;i <= n;i ++){
        int x,y;
        cin >> x >> y ;
        tree[i].left = x;
        tree[i].right = y;
        tree[x].root = tree[y].root = i;
    }

    traversal1(1);
    cout << endl;
    traversal2(1);
    cout << endl;
    traversal3(1);

    return 0;
}

B2001 入门测试题目 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

签到题,注意开long long

#include <bits/stdc++.h>

using namespace std;

int main() {

   long long a,b;
   cin >> a >> b;
   cout << a + b << endl;

    return 0;
}
posted @ 2023-07-22 18:50  Ke_scholar  阅读(26)  评论(0编辑  收藏  举报