• Educational Codeforces Round 75 (Rated for Div. 2)


    Educational Codeforces Round 75 (Rated for Div. 2)

    A. Broken Keyboard

    • 思路:最开始没搞清楚题意瞎搞 只需要判断前后两连续字符是否相同 不同则将前一个存入vector中 排序去个重输出即可

    • AC代码


    #include <algorithm>
    #include <iomanip>
    #include <iostream>
    #include <map>
    #include <math.h>
    #include <queue>
    #include <set>
    #include <sstream>
    #include <stack>
    #include <stdio.h>
    #include <string.h>
    #include <string>
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    
    ll mult_mod(ll x, ll y, ll mod){
        return (x * y - (ll)(x / (long double)mod * y + 1e-3) * mod + mod) % mod;
    }
    
    ll pow_mod(ll a, ll b, ll p){
        ll res = 1;
        while (b){
            if (b & 1)
                res = mult_mod(res, a, p);
            a = mult_mod(a, a, p);
            b >>= 1;
        }
        return res % p;
    }
    
    ll gcd(ll a, ll b){
        return b ? gcd(b, a % b) : a;
    }
    
    int t;
    string s;
    vector<char> res;
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("my_in.txt", "r", stdin);
    #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        cin >> t;
        while (t -- ){
            cin >> s;
            if (s.length() == 1){
                cout << s[0] << "
    ";
                continue;
            }
            res.clear();
            int i = 1;
            if (s[0] != s[1])
                res.push_back(s[0]);
            else
                i = 2;
            for (; i < s.length(); i ++ ){
                if (s[i] == s[i + 1])
                    i ++ ;
                else
                    res.push_back(s[i]);
            }
            sort(res.begin(), res.end());
            res.erase(unique(res.begin(), res.end()), res.end());
            for (int i = 0; i < res.size(); i ++ )
                cout << res[i];
            cout << "
    ";
        }
        return 0;
    }
    

    B. Binary Palindromes

    • 思路:当时想了一个错误的贪心思路 直接统计0 1的个数 然后先分配偶数长度的串 然后分配奇数长度的串 写了很长的模拟 最后wa了 只要有奇数长度的串或者0或1的个数是奇数就输出(n) 否则输出(n - 1)就行辽

    • AC代码


    #include <algorithm>
    #include <iomanip>
    #include <iostream>
    #include <map>
    #include <math.h>
    #include <queue>
    #include <set>
    #include <sstream>
    #include <stack>
    #include <stdio.h>
    #include <string.h>
    #include <string>
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    
    ll mult_mod(ll x, ll y, ll mod){
        return (x * y - (ll)(x / (long double)mod * y + 1e-3) * mod + mod) % mod;
    }
    
    ll pow_mod(ll a, ll b, ll p){
        ll res = 1;
        while (b){
            if (b & 1)
                res = mult_mod(res, a, p);
            a = mult_mod(a, a, p);
            b >>= 1;
        }
        return res % p;
    }
    
    ll gcd(ll a, ll b){
        return b ? gcd(b, a % b) : a;
    }
    
    const int N = 60;
    
    int q, n, cnt0, cnt1, cnt, len;
    string s;
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("my_in.txt", "r", stdin);
    #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        cin >> q;
        while (q -- ){
            cnt = 0, cnt0 = 0, cnt1 = 0;
            cin >> n;
            for (int i = 1; i <= n; i ++ ){
                cin >> s;
                len = s.size();
                if (len & 1)
                    cnt ++ ;
                for (int j = 0; j < len; j ++ ){
                    if (s[j] == '0')
                        cnt0 ++ ;
                    else
                        cnt1 ++ ;
                }
            }
    // debug        cout << cnt0 << " " << cnt1 << "
    ";
            if (cnt || (cnt0 % 2 == 0))
                cout << n << "
    ";
            else
                cout << n - 1 << "
    ";
        }
        return 0;
    }
    

    C. Minimize The Integer

    • 思路:奇数串儿和偶数串儿的顺序是不会改变的 用俩string分别存奇数串儿和偶数串儿 然后分别从前往后比较大小 小的存在前面即可

    • AC代码


    #include <algorithm>
    #include <iomanip>
    #include <iostream>
    #include <map>
    #include <math.h>
    #include <queue>
    #include <set>
    #include <sstream>
    #include <stack>
    #include <stdio.h>
    #include <string.h>
    #include <string>
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    
    ll mult_mod(ll x, ll y, ll mod){
        return (x * y - (ll)(x / (long double)mod * y + 1e-3) * mod + mod) % mod;
    }
    
    ll pow_mod(ll a, ll b, ll p){
        ll res = 1;
        while (b){
            if (b & 1)
                res = mult_mod(res, a, p);
            a = mult_mod(a, a, p);
            b >>= 1;
        }
        return res % p;
    }
    
    ll gcd(ll a, ll b){
        return b ? gcd(b, a % b) : a;
    }
    
    int t;
    string s;
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("my_in.txt", "r", stdin);
    #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        cin >> t;
        while (t -- ){
            cin >> s;
            string ans;
            string odd, even;
            for (int i = 0; i < s.length(); i ++ ){
                if (s[i] & 1)
                    odd.push_back(s[i]);
                else
                    even.push_back(s[i]);
            }
            for (int k = 0, i = 0, j = 0; k < s.length(); k ++ ){
                if (i == odd.size()){
                    ans.push_back(even[j]);
                    j ++ ;
                }
                else if (j == even.size()){
                    ans.push_back(odd[i]);
                    i ++ ;
                }
                else{
                    if (odd[i] >= even[j]){
                        ans.push_back(even[j]);
                        j ++ ;
                    }
                    else{
                        ans.push_back(odd[i]);
                        i ++ ;
                    }
                }
            }
            cout << ans << "
    ";
        }
        return 0;
    }
    

    D. Salary Changing

    • 思路:贪心 + 二分 先以左端点从大到小排序 然后二分找中间值即可(cmp函数l写成r debug已知没找到 然后疯狂wa

    • AC代码


    #include <algorithm>
    #include <iomanip>
    #include <iostream>
    #include <map>
    #include <math.h>
    #include <queue>
    #include <set>
    #include <sstream>
    #include <stack>
    #include <stdio.h>
    #include <string.h>
    #include <string>
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    
    ll mult_mod(ll x, ll y, ll mod){
        return (x * y - (ll)(x / (long double)mod * y + 1e-3) * mod + mod) % mod;
    }
    
    ll pow_mod(ll a, ll b, ll p){
        ll res = 1;
        while (b){
            if (b & 1)
                res = mult_mod(res, a, p);
            a = mult_mod(a, a, p);
            b >>= 1;
        }
        return res % p;
    }
    
    ll gcd(ll a, ll b){
        return b ? gcd(b, a % b) : a;
    }
    
    const int N = 2e5 + 10;
    const int INF = 0x3f3f3f3f;
    
    int t, n;
    ll s, ans;
    
    struct Seg{
        ll l, r;
    }seg[N];
    
    inline bool cmp(Seg s1, Seg s2){
        if (s1.l == s2.l)
            return s1.r > s2.r;
        return s1.l > s2.l;
    }
    
    inline bool check(ll x){
        ll cnt = n / 2 + 1, sum = 0;
        for (int i = 1; i <= n; i ++ ){
            if (seg[i].l <= x && seg[i].r >= x && cnt){
                sum += x;
                cnt -- ;
            }
            else{
                sum += seg[i].l;
                if (seg[i].l > x)
                    cnt -- ;
            }
        }
        if (cnt)
            return false;
        return sum <= s;
    }
    
    inline ll calc(){
        ll l = seg[n / 2 + 1].l + 1, r = s;
        ll mid;
        while (l <= r){
            mid = (l + r) >> 1;
            if (check(mid))
                l = mid + 1;
            else
                r = mid - 1;
        }
        return r;
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("my_in.txt", "r", stdin);
    #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        cin >> t;
        while (t -- ){
            cin >> n >> s;
            for (int i = 1; i <= n; i ++ )
                cin >> seg[i].l >> seg[i].r;
            sort(seg + 1, seg + n + 1, cmp);
            ans = calc();
            cout << ans << "
    ";
        }
        return 0;
    }
    
  • 相关阅读:
    Ubuntu Linux Matlab 安装 中文乱码 桌面启动器 Could not find the main class: java/splash.png. 终端terminal 直接运行 matlab
    Ubuntu Linux 官网 u盘安装 u盘系统 图文教程
    从google map google earth获得大图 方法总结
    论文查重网址
    [ZZ] Computer Science Conference Rankings
    Ubuntu linux 信使 iptux Window 飞鸽 ipmsg 飞秋 feiq 文件传输
    Ubuntu Linux Matlab mex
    Ubuntu Dell OptiPlex 990 Intel Gigabit CT Desktop Adapter网卡驱动安装
    C++的File类文件操作
    GIS软件比较
  • 原文地址:https://www.cnblogs.com/Misuchii/p/11747773.html
Copyright © 2020-2023  润新知