西南民族大学 春季 2023 训练赛 7

发布时间 2023-04-16 16:52:03作者: Ke_scholar

题目详情 - L1-1 人与神 (pintia.cn)

换成php直接输出(

To iterate is human, to recurse divine.

题目详情 - L1-2 两小时学完C语言 (pintia.cn)

void solve()
{
    cin >> n >> k >> m;
    cout << n - k * m << endl;
}

题目详情 - L1-3 强迫症 (pintia.cn)

void solve()
{
    cin >> n;
    m = n/100;
    if(m < 100){
        if(m < 22)
        printf("20%02d-%02d",m,n%100);
        else
            printf("19%02d-%02d",m,n%100);
    }
    else{
        printf("%d-%02d",m,n%100);
    }
}

题目详情 - L1-4 降价提醒机器人 (pintia.cn)

void solve()
{
    cin >> n >> m;
    for(int i = 0 ; i < n; i++){
        double x;
        cin >> x;
        if(x < m)
            printf("On Sale! %.1lf\n",x);
    }
}

题目详情 - L1-5 大笨钟的心情 (pintia.cn)

void solve()
{
    for(int i = 0; i < 24 ; i++)
        cin >> pat[i];
    while(cin >> m){
        if(m < 0 || m >= 24) 
            break;
        cout << pat[m] << ' ' << (pat[m] > 50 ? "Yes" : "No") << endl; 
    }
}

题目详情 - L1-6 吉老师的回归 (pintia.cn)

用getline如果是存字符串数组的话记得把第一行的缓存的换行给getchar()掉......

void solve()
{
    string s1 = "qiandao", s2 = "easy";
    cin >> n >> m;
    for(int i = 0; i <= n; i++) {
        string s;
        getline(cin , s);
        if(s.find(s1) == string::npos && s.find(s2) == string::npos)
        {

            if(m < 0){
                cout << s << endl;
                return ;
            }
            m--;          
        }
    }
    cout << "Wo AK le" << endl;
}

题目详情 - L1-7 天梯赛的善良 (pintia.cn)

map<int,int> mp;
void solve()
{
    cin >> n;
    int minn = inf, maxx = -inf,v[N];
    for(int i = 0; i < n; i++){
        cin >> pat[i];
        mp[pat[i]] ++;
        minn = min(minn, pat[i]);
        maxx = max(maxx, pat[i]);
    }
    cout << minn << ' ' << mp[minn] << endl;
    cout << maxx << ' ' << mp[maxx] << endl;
}

 

题目详情 - L1-8 乘法口诀数列 (pintia.cn)

vector<int> v;
void solve()
{
    int a1,a2;
    cin >> a1 >> a2 >> n;
    v.push_back(a1);
    v.push_back(a2);
    int d = n;
    int cnt = 0;
    while(d--){
        int x = v[cnt];
        int y = v[++cnt];
        if(x * y >= 10){
            v.push_back(x * y / 10);
            v.push_back((x * y) % 10);
        }
        else{
            v.push_back(x * y);
        }
    }
    for(int i = 0; i < n; i++)
        cout << v[i] << (i == n - 1 ? "\n" : " ") ;
}

题目详情 - L2-1 包装机 (pintia.cn)

用栈进行模拟即可,轨道我用的是vector来存,可能需要注意的点就是框满了和轨道空了的情况.

void solve()
{
    int s;
    stack<char> kuang;
    cin >> n >> m >> s;
    vector<string> str;
    str.push_back(" ");
    for(int i = 1; i <= n; i ++){
        string s1;
        cin >> s1;
        str.push_back(s1);
    }
    int k;
    string ans = "";
    while(cin >> k && k != -1){
        if(k == 0){
            if(kuang.empty()) continue;
            ans += kuang.top();
            kuang.pop();
        }
        else {
            if (str[k].empty()) continue;
            if ((int) kuang.size() >= s) {
                ans += kuang.top();
                kuang.pop();
            }
            char c = str[k][0];
            kuang.push(c);
            str[k].erase(0, 1);
        }
    }
    cout << ans << endl;
}

 

题目详情 - L2-2 病毒溯源 (pintia.cn)

因为最开始变异的病毒可能是随机的,所以要先找到他的根病毒(?和根节点差不多一个意思吧),然后从这个点开始dfs,找到最长的变异链即可, 对于他说的最小序列,个人觉得这里有两种方法,一是当两者长度相等时,直接令ans1等于小的那个即可(vector可直接比较),二是在存结点的时候可以排个序,这样就能保证最开始的那条变异即是最小序列.

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <set>
#include <utility>
#define inf 0x3f3f3f3f
#define endl '\n'
//#define int long long
#define f first
//#define s second

using namespace std;

const int N = 1e6+10, M = 1e6 + 10;

//typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
//priority_queue <int,vector<int>,greater<int> > q2;
int n,m,t,sa,pa,q,k,sorce,pat[N];
/*
*/
vector<int> shu[N];
vector<int> ans1,arr;
bool vis[N];
int hai[N];
int ans = 0 ;
void dfs(int x, vector<int> &arr){
    if(arr.size() > ans1.size()){
        ans1 = arr;
    }
    if(arr.size() == ans1.size())
    {
        if(ans1 > arr)
            ans1 = arr;
    }
    for(auto j : shu[x]){
        arr.push_back(j);
        dfs(j, arr);
        arr.pop_back();
    }
    return ;
}
void solve()
{
    cin >> n;
    for(int i = 0; i < n; i++){
        int k;
        cin >> k;
        for(int j = 0; j < k; j++){
            int x;
            cin >> x;
            vis[x] = true;
            shu[i].push_back(x);
        }
       // sort(shu[i].begin(), shu[i].end());
    }
    for(int i = 0; i < n; i ++){
        if(!vis[i]){
            arr.push_back(i);
            dfs(i,arr);
            break;
        }
    }
    cout << ans1.size() << endl;
    for(int i =0; i < ans1.size(); i++)
        cout << ans1[i] << (i == ans1.size() -1 ? "\n" : " ") ;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int Ke_scholar  = 1;
    while(Ke_scholar--)
    {
        solve();
    }
    return 0;
}

题目详情 - L2-3 清点代码库 (pintia.cn)

用map记录每个相同功能代码出现的次数,然后再将其赋值到字符串,最后对字符串进行排序并输出即可.

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define endl '\n'
//#define int long long

using namespace std;

//typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
map<vector<int>, int > mp;
//priority_queue <int,vector<int>,greater<int> > q2;
int n,m,t,k;
/*
*/
struct Ans{
    int num;
    vector<int> a;
    bool operator < (const Ans& s)const{
        if(num == s.num)
            return s.a > a;
        return num > s.num;
    }
};
vector<Ans> ans;
void solve()
{
    cin >> n >> m;
    for(int i = 0 ; i < n; i++){
        vector<int> p;
        int x;
        for(int j = 0; j < m; j++){
            cin >> x;
            p.push_back(x);
        }
            mp[p]++;
    }
    cout << mp.size() << endl;
    for(auto i : mp){
        Ans x;
        x.num = i.second;
        x.a = i.first;
        ans.push_back(x);
    }
    sort(ans.begin(), ans.end());
    for(auto i : ans){
        cout << i.num;
        for(auto j : i.a){
            cout << ' ' << j;
        }
        cout << endl;
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int Ke_scholar  = 1;
    while(Ke_scholar--)
    {
        solve();
    }
    return 0;
}

题目详情 - L2-4 哲哲打游戏 (pintia.cn)

此题是之前一道一样的题.

也是最后一道.

题解传送门->西南民族大学 春季 2023 训练赛 5 - Ke_scholar - 博客园 (cnblogs.com)