• codeforces605


    A. Three Friends

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L k<<1
    #define R k<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define mid (tree[k].l+tree[k].r)>>1
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    typedef long long i64;
    using namespace std;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int q,a,b,c;  cin >> q;
        while(q--){
            cin >> a >> b >> c;
            int minn = min(min(a,b),c);
            int maxx = max(max(a,b),c);
            cout << max(0,(maxx-minn)*2-4) <<'
    '; 
        }
        return 0;
    }
    View Code

    B. Snow Walking Robot

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L k<<1
    #define R k<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define mid (tree[k].l+tree[k].r)>>1
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    typedef long long i64;
    using namespace std;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int q;  cin >> q;
        while(q--){
            string str; cin >> str;
            int numU = 0,numD = 0,numL = 0,numR = 0;
            for(int i=0;i!=SIZE(str);++i)
                switch(str[i]){
                    case 'D': ++numD;   break;
                    case 'U': ++numU;   break;
                    case 'L': ++numL;   break;
                    case 'R': ++numR;   break;
                }
            int r = min(numD,numU),c = min(numL,numR);
            if(!r&&!c){
                cout << 0 << '
    ';
                continue;
            }
            if(!c){
                cout << 2 <<'
    ';
                cout << "UD" <<'
    ';
                continue;
            }
            if(!r){
                cout << 2 <<'
    ';
                cout << "LR" <<'
    ';
                continue;
            }
            cout << (r + c)*2 <<'
    ';
            for(int i=0;i!=r;++i)
                cout << "U" ;
            for(int i=0;i!=c;++i)
                cout << "L" ;
            for(int i=0;i!=r;++i)
                cout << "D" ;
            for(int i=0;i!=c;++i)
                cout << "R" ;
            cout << '
    ';
        }    
        return 0;
    View Code

    C. Yet Another Broken Keyboard

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L k<<1
    #define R k<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define mid (tree[k].l+tree[k].r)>>1
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    typedef long long i64;
    using namespace std;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n,k;    cin >> n >> k;
        string str; cin >> str;
        set<char> S;    char ch;
        while(k--){
            cin >> ch;
            S.insert(ch);
        }
        i64 len = 0,sum = 0;
        bool flag = false;
        for(int i=0;i!=SIZE(str);++i){
            if(!flag&&S.count(str[i])){
                ++len;
                flag = true;
                continue;
            }
            if(flag){
                if(S.count(str[i]))
                    ++len;
                else{
                    sum += (1+len)*len/2;
                    len = 0;
                    flag = false;
                }
            }
        }
        sum += (1+len)*len/2;
        cout << sum <<'
    ';
        return 0;
    }
    View Code

    D. Remove One Element

    题解:求出每一个位置往左和往右的最长位置,枚举每一个中间位置,如果左边小于右边则与最长长度比较

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L k<<1
    #define R k<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define mid (tree[k].l+tree[k].r)>>1
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    typedef long long i64;
    using namespace std;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n;  cin >> n;
        vector<int> arr(n),l(n),r(n);
        for(auto& v:arr)
            cin >> v;
        for(int i=0;i!=n;++i)
            l[i] = i>0&&arr[i]>arr[i-1] ? l[i] = l[i-1] + 1 : 1;
        for(int i=n-1;i>=0;--i)
            r[i] = i<n-1&&arr[i]<arr[i+1] ? r[i] = r[i+1] + 1 : 1;
        int maxValue = *max_element(l.begin(),l.end());
        for(int index=1;index!=n-1;++index)
            if(arr[index-1] < arr[index+1])
                maxValue = max(maxValue,l[index-1]+r[index+1]);
        cout << maxValue << '
    ';
        return 0;
    }
    View Code

    E. Nearest Opposite Parity

    题解:将多源点转换为单点,因此反向建边寻找最短路径

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L k<<1
    #define R k<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define mid (tree[k].l+tree[k].r)>>1
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define PII pair<int,int>
    typedef long long i64;
    using namespace std;
    const int maxn = 2e5 + 32;
    int arr[maxn],ans[maxn],dis[maxn];
    vector<int> Edge[maxn];
    void spfa(int cur){
        memset(dis,inf,sizeof(dis));
        queue<int> q;   q.push(cur);
        dis[cur] = 0;
        while(!q.empty()){
            int c = q.front();  q.pop();
            for(auto& v:Edge[c])
                if(dis[v] > dis[c] + 1){
                    dis[v] = dis[c] + 1;
                    q.push(v);
                }
        }
    }
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n;  cin >> n;
        for(int i=1;i<=n;++i){
            cin >> arr[i];
            if(i-arr[i] >= 1) Edge[i-arr[i]].push_back(i);
            if(i+arr[i] <= n) Edge[i+arr[i]].push_back(i);  
        }
        //0 odd n+1 even
        for(int i=1;i!=n+1;++i){
            if(arr[i]&1)    Edge[n+1].push_back(i);
            else    Edge[0].push_back(i);
        }
        memset(ans,-1,sizeof(ans));
        spfa(0);
        for(int i=1;i<=n;++i)
            if(arr[i]&1&&dis[i]!=inf)    ans[i] = dis[i];
        spfa(n+1);               
        for(int i=1;i<=n;++i)
            if(!(arr[i]&1)&&dis[i]!=inf)    ans[i] = dis[i];
        for(int i=1;i<=n;++i)
            cout << (ans[i] == -1 ? -1:ans[i] -1) <<" 
    "[i==n];  
        return 0;
    }
    View Code

    F题没写出来,菜得真实

      

  • 相关阅读:
    Codeforces Round #218 (Div. 2) C题
    Codeforces Round #217 (Div. 2) c题
    求组合数
    hdu 4539(状态压缩dp)
    poj 2923(状态压缩dp)
    项目管理
    java 实现单向链表
    sql
    设计模式
    自己写了一个解析json为table的工具类
  • 原文地址:https://www.cnblogs.com/newstartCY/p/12069391.html
Copyright © 2020-2023  润新知