zoukankan      html  css  js  c++  java
  • Codeforces Round #601 (Div. 2)

    Codeforces Round #601 (Div. 2)

    A. Changing Volume

    • 思路:水题

    • 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;
    ll a, b, ans;
    
    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 >> a >> b;
            if (a == b)
                cout << "0
    ";
            else{
                ll tmp = abs(a - b);
                ans = tmp / 5 + tmp % 5 / 2 + tmp % 5 % 2;
                cout << ans << "
    ";
            }
        }
        return 0;
    }
    

    B. Fridge Lockers

    • 思路:贪心

    • 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 = 1010;
    
    int t, n, m, ans, res;
    
    struct A{
        int a, id;
    }a[N];
    
    inline bool cmp(const A &a1, const A &a2){
        return a1.a < a2.a;
    }
    
    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 -- ){
            ans = 0;
            cin >> n >> m;
            res = m - n;
            for (int i = 1; i <= n; i ++ ){
                cin >> a[i].a;
                a[i].id = i;
            }
            if (m < n || n == 2){
                cout << "-1
    ";
                continue;
            }
            sort(a + 1, a + n + 1, cmp);
            for (int i = 1; i <= n; i ++ )
                ans += a[i].a;
            ans *= 2;
            for (int i = 1; i <= res; i ++ )
                ans += a[1].a + a[2].a;
            cout << ans << "
    ";
            for (int i = 1; i < n; i ++ )
                cout << a[i].id << " " << a[i + 1].id << "
    ";
            cout << a[n].id << " " << a[1].id << "
    ";
            for (int i = 1; i <= res; i ++ )
                cout << a[1].id << " " << a[2].id << "
    ";
        }
        return 0;
    }
    

    C. League of Leesins

    • 思路:每次更新起点 与起点有关系的点只有两个 然后把与起点有关的点从集合中删除 重新找起点

    • 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 = 1e5 + 10;
    
    int n, tot, q1, q2, q3, beg, en;
    int vis[N], ans[N];
    bool flag;
    set<int> st[N];
    
    void dfs(int x, int cnt){
        if (cnt == n - 1)
            return ;
        for (auto it = st[x].begin(); it != st[x].end(); it ++ )
            if (vis[*it] != 2)
                st[*it].erase(x);
        for (auto it = st[x].begin(); it != st[x].end(); it ++ ){
            if (!vis[*it] && st[*it].size() == 2){
                ans[ ++ tot ] = *it;
                vis[*it] = 1;
                dfs(*it, cnt + 1);
            }
        }
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("my_in.txt", "r", stdin);
    #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        cin >> n;
        for (int i = 1; i <= n - 2; i ++ ){
            cin >> q1 >> q2 >> q3;
            st[q1].insert(q2), st[q1].insert(q3);
            st[q2].insert(q1), st[q2].insert(q3);
            st[q3].insert(q1), st[q3].insert(q2);
        }
        for (int i = 1; i <= n; i ++ ){
            if (!flag && st[i].size() == 2){
                beg = i;
                flag = true;
            }
            else if (st[i].size() == 2){
                en = i;
                break;
            }
        }
        ans[ ++ tot ] = beg;
        vis[beg] = 1;
        for (auto it = st[en].begin(); it != st[en].end(); it ++ )
            vis[*it] = 2;
        dfs(beg, 1);
        for (auto it = st[en].begin(); it != st[en].end(); it ++ )
            if (vis[*it] == 2 && st[*it].size() == 4)
                ans[ ++ tot ] = *it;
        for (auto it = st[en].begin(); it != st[en].end(); it ++ )
            if (vis[*it] == 2 && st[*it].size() == 3){
                ans[ ++ tot ] = *it;
                ans[ ++ tot ] = en;
                break;
            }
        for (int i = 1; i <= tot; i ++ )
            cout << ans[i] << " ";
        return 0;
    }
    

    D. Feeding Chicken

    • 思路:类似于蛇形构造 考场降智题意读复杂了

    • 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>
    #define debug(x) cout << #x << ": " << x << "
    "
    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 = 110;
    
    int t, r, c, k, cnt, tot, x, y, xx;
    char mp[N][N];
    vector<char> ch;
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("my_in.txt", "r", stdin);
    #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        for (char i = '0'; i <= '9'; i ++ )
            ch.push_back(i);
        for (char i = 'A'; i <= 'Z'; i ++ )
            ch.push_back(i);
        for (char i = 'a'; i <= 'z'; i ++ )
            ch.push_back(i);
        cin >> t;
        while (t -- ){
            cin >> r >> c >> k;
            cnt = 0, tot = 0;
            for (int i = 1; i <= r; i ++ ){
                for (int j = 1; j <= c; j ++ ){
                    cin >> mp[i][j];
                    if (mp[i][j] == 'R')
                        cnt ++ ;
                }
            }
            x = cnt / k, y = cnt % k;
            xx = x;
            if (y){
                xx ++ ;
                y -- ;
            }
            for (int i = 1; i <= r; i ++ ){
                if (i & 1){
                    for (int j = 1; j <= c; j ++ ){
                        if (mp[i][j] == 'R'){
                            xx -- ;
                            cnt -- ;
                        }
                        mp[i][j] = ch[tot];
                        if (!cnt){
                            mp[i][j] = ch[tot];
                            continue;
                        }
                        if (!xx){
                            if (y){
                                xx = x + 1;
                                y -- ;
                            }
                            else
                                xx = x;
                            tot ++ ;
                        }
                    }
                }
                else{
                    for (int j = c; j >= 1; j -- ){
                        if (mp[i][j] == 'R'){
                            xx -- ;
                            cnt -- ;
                        }
                        mp[i][j] = ch[tot];
                        if (!cnt){
                            mp[i][j] = ch[tot];
                            continue;
                        }
                        if (!xx){
                            if (y){
                                xx = x + 1;
                                y -- ;
                            }
                            else
                                xx = x;
                            tot ++ ;
                        }
                    }
                }
            }
            for (int i = 1; i <= r; i ++ ){
                for (int j = 1; j <= c; j ++ )
                    cout << mp[i][j];
                cout << "
    ";
            }
        }
        return 0;
    }
    

    E2. Send Boxes to Alice (Hard Version)

    • 思路:参考dalao的思路 枚举sum的质因数x 对于每个x 计算(a_i)的前缀和(sum_i) 因为要求(a_i % x = 0) 所以(sum_i % x = 0) 如果(sum_i % x != 0) 对余数凑成x 每次取花费最少的然后算总和取最小值

    • 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 = 1e6 + 10;
    const ll INF = 1e18;
    
    int n;
    int a[N];
    ll sum, ans;
    
    void calc(ll x){
        ll cnt = 0, now = 0;
        for (int i = 1; i <= n; i ++ ){
            now = (now + a[i]) % x;
            cnt += min(now, x - now);
        }
        ans = min(ans, cnt);
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("my_in.txt", "r", stdin);
    #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        ans = INF;
        cin >> n;
        for (int i = 1; i <= n; i ++ ){
            cin >> a[i];
            sum += a[i];
        }
        if (sum == 0){
            cout << "0
    ";
            return 0;
        }
        if (sum == 1){
            cout << "-1
    ";
            return 0;
        }
        for (ll i = 2; i * i <= sum; i ++ ){
            if (sum % i == 0){
                calc(i);
                while (sum % i == 0)
                    sum /= i;
            }
        }
        if (sum > 1)
            calc(sum);
        cout << ans << "
    ";
        return 0;
    }
    
  • 相关阅读:
    优步UBER司机全国各地奖励政策汇总 (4月4日-4月10日)
    苏州Uber优步司机奖励政策(4月2日~4月3日)
    成都Uber优步司机奖励政策(4月5日)
    北京Uber优步司机奖励政策(4月5日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月5日)
    百度百科股票教程
    趋势型指标——MACD
    Git和Code Review流程
    nodejs npm常用命令
    win系统下nodejs安装及环境配置
  • 原文地址:https://www.cnblogs.com/Misuchii/p/11909634.html
Copyright © 2011-2022 走看看