• 码蹄杯 2024 初赛第一场


    在这里插入图片描述

    MC0301

    求个最大值

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    int n;
    
    void solve(){
        cin >> n;
        int mx = -1;
        for(int i = 0;i < n;i ++){
            int x; cin >> x;
            mx = max(mx,x);
        }
        cout << mx << endl;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    

    MC0302

    sort一下

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    int n;
    
    void solve(){
        vector<int> a(3);
        for(int i = 0;i < 3;i ++) cin >> a[i];
        sort(a.begin(),a.end());
        for(int i = 0;i < 3;i ++) cout << a[i] << " "; 
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0303

    看一下范围内有多少质数

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e5 + 7;
    int n;
    int st[N]; 
    
    int get_prime(){
        int cnt = 0;
        for(int i = 2;i <= n;i ++){
            if(st[i]) continue;
            cnt ++;
            for(int j = i + i;j <= n;j += i) st[j] = 1; 
        }
        return cnt;
    }
    
    void solve(){
        cin >> n;
        cout << get_prime() << endl;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0304

    二分答案 然后check里去将每个 a i a_i ai减去二分的答案 看长度 f − n f-n fn的区间和
    大于零更新 l 小于零更新 r

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e5 + 7;
    int n,f;
    int a[N];
    
    int check(double x){
        vector<double> b(n + 1);
        for(int i = 1;i <= n;i ++) b[i] = a[i] - x;
        vector<double> pre(n + 1);
        for(int i = 1;i <= n;i ++) pre[i] = pre[i - 1] + b[i];
        double mn = 1e18;
        for(int i = f;i <= n;i ++){
            mn = min(mn,pre[i - f]);
            if(pre[i] - mn >= 0) return 1; 
        }
        return 0;
    }
    
    void solve(){
        cin >> n >> f;
        for(int i = 1;i <= n;i ++) cin >> a[i];
        double l = 1,r = 2000;
        while(r - l > 1e-6){
            double mid = (l + r) / 2;
            if(check(mid)) l = mid;
            else r = mid; 
        }
        cout << floor(r * 1000) << endl;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0305

    模拟一下排名

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e5 + 7;
    int n;
    int a[N];
    
    void solve(){
        cin >> n;
        for(int i = 0;i < n;i ++) cin >> a[i];
        sort(a,a + n,greater<int>());
        map<int,int> mp;
        int pos = 1;
        for(int i = 0;i < n;i ++){
            if(!mp[a[i]]) mp[a[i]] = pos ++;
            else pos ++;
        }
        int x; cin >> x;
        cout << mp[x] << endl;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0306

    转化一下类型即可

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e5 + 7;
    int n;
    int a[N];
    
    void solve(){
        char x; cin >> x;
        cout << (int)x << endl;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0307

    存一下路径跑一遍bfs即可

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e6 + 7;
    vector<int> g[N];
    int n,x,y;
    
    int bfs(){
        queue<int> q;
        q.push(x);
        vector<int> st(n + 1);
        vector<int> d(n + 1,1e9);
        d[x] = 0;
        st[x] = 1;
        while(q.size()){
            int t = q.front();
            q.pop();
            for(auto root : g[t]){
                if(st[root]) continue;
                d[root] = min(d[t] + 1,d[root]);
                if(root == y) return d[y];
                q.push(root);
                st[root] = 1;  
            }
        }
        return -1;
    }
    
    void solve(){
        cin >> n >> x >> y;
        for(int i = 1;i <= n;i ++){
            int len; cin >> len;
            int u = i;
            int v1 = i + len,v2 = i - len;
            if(v1 <= n) g[u].push_back(v1);
            if(v2 >= 1) g[u].push_back(v2); 
        }
        cout << bfs();
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0308

    统计一遍大写字符

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    void solve(){
        string s; getline(cin,s);
        int ans = 0;
        for(int i = 0;i < s.size();i ++){
            if(s[i] >= 'A' && s[i] <= 'Z') ans ++;
        }
        cout << ans;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    

    MC0309

    拆位统计每位的个数
    然后分别算一下按位与 和 按位或的贡献

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e5 + 7;
    int a[N];
    int n;
    
    void solve(){
        cin >> n;
        for(int i = 0;i < n;i ++) cin >> a[i];
        map<int,int> mp;
        int ans = 0;
        for(int i = 0;i < n;i ++) ans += a[i];
        for(int i = 0;i < 32;i ++){
            for(int j = 0;j < n;j ++){
                int cnt = a[j] >> i;
                if(cnt & 1) mp[i] ++;
            }
            ans += mp[i] * (n - 1 + n - mp[i]) / 2 * ((int)1 << i);
            if(mp[i] > 1) ans += mp[i] * (mp[i] - 1) / 2 * ((int)1 << i);
        }
        cout << ans << endl;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0310

    reverse一下

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e5 + 7;
    int a[N];
    int n;
    
    void solve(){
        string s; cin >> s;
        reverse(s.begin(),s.end());
        cout << s;
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    

    MC0311

    模拟

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    void solve(){
        map<int,int> mp;
        int space = 0;
        for(int i = 0;i < 8;i ++){
            int x; cin >> x;
            mp[x] ++;
            if(mp[x] == 3){
                space += 2;
                mp[x] = 0;
                mp[x * 10] ++;
            }
        }
        int n; cin >> n;
        for(int i = 0;i < n;i ++){
            int x; cin >> x;
            if(mp[x] == 2){
                mp[x] = 0;
                mp[x * 10] ++;
                space += 1;
                if(mp[x * 10] == 3){
                    mp[x * 10] = 0;
                    mp[x * 100] ++;
                    space += 1;
                    if(mp[x * 100] == 3){
                        mp[x * 100] = 0;
                        mp[x * 1000] ++;
                        space += 1;
                    }
                }
            } else if(space){
                mp[x] ++;
                space --;
            }
        }
        int op; cin >> op;
        if(mp.rbegin()->first >= op) cout << "YES YES YES";
        else cout << "NO NO NO";
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0312

    直接erase 或者 更新删除位置开始以后的数组的值为他之后的值复杂度也是可以的

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    int n,m; 
    
    void solve(){
        cin >> n;
        vector<int> a;
        for(int i = 1;i <= n;i ++){
            int x; cin >> x;
            a.push_back(x); 
        }
        cin >> m;
        for(int i = 1;i <= m;i ++){
            int pos; cin >> pos;
            a.erase(a.begin() + pos - 1);
        }
        for(auto x : a) cout << x << " ";
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
    

    MC0313

    暴力枚举

    code:

    #include
    #define int long long
    #define endl '\n'
    
    using namespace std;
    
    const int N = 1e5 + 7; 
    int n,m; 
    int a[N];
    
    void solve(){
        cin >> n;
        for(int i = 1;i <= n;i ++) cin >> a[i];
        a[n + 1] = a[1],a[n + 2] = a[2],a[n + 3] = a[3];
        int pos = 0,sum = 0;
        int mx = -1;
        for(int i = 1;i <= n;i ++){
            sum = a[i] + a[i + 1] + a[i + 2] + a[i + 3];
            if(sum > mx) mx = sum,pos = i;
        }
        cout << mx << endl << pos << endl; 
    }
    
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr),cout.tie(nullptr);
        int _ = 1; 
        while(_ --){
            solve();
        }
        return 0;
    }
    
  • 相关阅读:
    如何用Python敲出樱花开放(附零基础学习资料)
    java毕业设计网上书城网站源码+lw文档+mybatis+系统+mysql数据库+调试
    Pytorch的grid_sample是如何实现对grid求导的?(源码解读)
    Go语言Web开发Revel框架搭建
    C#小知识
    gRPC 协议缓冲区
    论文阅读 A Data-Driven Graph Generative Model for Temporal Interaction Networks
    业务架构·应用架构·数据架构实战~TOGAF理论全景解读
    【Mysql】 linux | mysql | 配置日志路径 | 关闭binlog
    Python学习笔记第四十三天(NumPy 数学函数)
  • 原文地址:https://blog.csdn.net/yujie33/article/details/139422281