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

    C:

    *可以保留删除或者增加

    ? 保留或者删除

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        string s;
        int k,len;
        cin>>s>>k;
        int sumx = 0;
        len = s.size();
        for(int j=0;j<len;j++){
            if(isalpha(s[j])) sumx++;
            else sumx--;
        }
        if(sumx>k){
            cout<<"Impossible"<<endl;
        }else{
           string ans = "";
           int sum = k-sumx;
           for(int j=0;j<len-1;j++){
              if(isalpha(s[j])&&isalpha(s[j+1])){
                 ans+=s[j];
              }else{
                 if(s[j+1] == '?'){
                    if(sum){
                       sum--;
                       ans+=s[j];
                    }
                 }else if(s[j+1] == '*'){
                    while(sum){
                        sum--;
                        ans+=s[j];
                    }
                 }
              }
           }
           if(isalpha(s[len-1])){
              ans+=s[len-1];
           }
           if(ans.size()==k) cout<<ans<<endl;
           else{
             cout<<"Impossible"<<endl;
           }
        }
        return 0;
    }

    D:

    把深度为偶数的节点隐藏掉(-1) 给出每个节点的父亲以及这个点到 根部的 value值总和 包括自己在内  求这棵树最小的value总和

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100005
    #define inf 99999999999999
    #define LL long long
    #define debug(x) cout<<x<<endl
    vector<LL>q[maxn];
    LL a[maxn],ans[maxn],va=0;
    bool flag = 0;
    void dfs(LL u,LL fa,LL deep){
       if(deep%2==0){
          LL mi = inf;
          for(int j=0;j<q[u].size();j++){
             mi = min(mi,a[q[u][j]]);
          }
          if(mi==inf){
             ans[u] = 0;
             a[u] = a[fa];
          }else{
             a[u] = mi;
             ans[u] = a[u] - a[fa];
          }
       }else{
          if(fa!=0){
             ans[u] = a[u] - a[fa];
          }
       }
       for(int j=0;j<q[u].size();j++){
          int v = q[u][j];
          dfs(v,u,deep+1);
       }
    }
    int main(){
        LL n;
        scanf("%lld",&n);
        for(LL j=2;j<=n;j++){
            LL x;
            scanf("%d",&x);
            q[x].push_back(j);
        }
        for(LL j=1;j<=n;j++){
            scanf("%lld",&a[j]);
        }
        ans[1]=a[1];
        dfs(1,0,1);
        for(int j=1;j<=n;j++){
            va+=ans[j];
            //cout<<ans[j]<<endl;
            if(ans[j]<0){
                cout<<"-1"<<endl;
                return 0;
            }
        }
        cout<<va<<endl;
    }
  • 相关阅读:
    广搜 BFS()
    最短路-A
    DFS-C
    codeforces contest
    小技巧
    将博客搬至CSDN
    建树
    codeforces gym102411 Equidistant(图论+乱搞)
    codeforces 1250N wires(简单图论)
    Splay 树
  • 原文地址:https://www.cnblogs.com/Dvelpro/p/10528994.html
Copyright © 2011-2022 走看看