Codeforces Round #617 (Div. 3) Editorial


题解

A - Array with Odd Sum

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll t;
    cin>>t;
    while(t--){
        ll n;
        cin>>n;
        ll sum=0;
        bool flago=false,flage=false;
        for(ll i=1;i<=n;i++){
            ll x;
            scanf("%lld",&x);
            sum+=x;
            if(x&1)flago=true;
            else flage=true;
        }
        if(sum&1||(flago&&flage))puts("YES");
        else puts("NO");
    }
}

B - Food Buying

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll t;
    cin>>t;
    while(t--){
        ll x;
        cin>>x;
        ll ans=0;
        while(x>=10){
            ans+=x/10*10;
            x=x%10+x/10;
        }
        ans+=x;
        cout<<ans<<endl;
    }
}

C - Yet Another Walking Robot

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=0x7f7f7f7f;
const ll maxn=2e5+10;
map<pair<ll,ll>,ll>mp;
char s[maxn];
int main(){
    ll t;
    cin>>t;
    while(t--){
        mp.clear();
        ll n;
        cin>>n;
        cin>>s+1;
        ll c=0,m=0;
        pair<ll,ll>ans=make_pair(0,INF);
        mp[make_pair(0,0)]=0;
        for(ll i=1;i<=n;i++){
            if(s[i]=='L')c--;
            else if(s[i]=='R')c++;
            else if(s[i]=='U')m--;
            else m++;
            if(mp.count(make_pair(m,c))&&ans.second-ans.first+1>i-mp[make_pair(m,c)])
                ans=make_pair(mp[make_pair(m,c)]+1,i);
            mp[make_pair(m,c)]=i;
        }
        if(ans.first)printf("%lld %lld\n",ans.first,ans.second);
        else puts("-1");
    }
}

D - Fight with Monsters

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll>vec;
int main(){
    ll n,a,b,k;
    cin>>n>>a>>b>>k;
    for(ll i=1;i<=n;i++){
        ll x;
        cin>>x;
        x-=(x-1)/(a+b)*(a+b);
        x-=a;
        if(x>0){
            vec.push_back((x+a-1)/a);
        }
        else
            vec.push_back(0);
    }
    sort(vec.begin(),vec.end());
    ll ans=0;
    for(ll i=0;i<n;i++){
        if(k>=vec[i]){
            ans++;
            k-=vec[i];
        }
        else
            break;
    }
    cout<<ans<<endl;
}

E1 - String Coloring (easy version)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll n;
    string s;
    cin>>n;
    cin>>s;
    string ans;
    string cur;
    bool flag=true;
    for(ll i=0;i<n;i++){
        if(i==0||s[i]>=s[i-1]){
            ans+='0';
            cur+='0';
            continue;
        }
        ans+='1';
        cur+='1';
        for(ll j=i-1;j>=0;j--){
            if(!flag||s[j+1]>=s[j])
                break;
            if(cur[j]=='1')
                flag=false;
            else{
                swap(cur[j+1],cur[j]);
                swap(s[j+1],s[j]);
            }
        }
    }
    if(flag){
        puts("YES");
        cout<<ans<<endl;
    }
    else
        puts("NO");
}

E2 - String Coloring (hard version)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=2e5+10;
ll dp1[maxn],dp2[26];
int main(){
    ll n;
    cin>>n;
    string s;
    cin>>s;
    ll ans=0;
    for(ll i=0;i<n;i++){
        dp1[i]=1;
        for(ll j=25;j>s[i]-'a';j--){
            dp1[i]=max(dp1[i],dp2[j]+1);
        }
        dp2[s[i]-'a']=max(dp2[s[i]-'a'],dp1[i]);
        ans=max(ans,dp2[s[i]-'a']);
    }
    cout<<ans<<endl;
    for(ll i=0;i<n;i++){
        printf("%lld%c",dp1[i],i==n-1?'\n':' ');
    }
    return 0;
}

F - Berland Beauty

#include<bits/stdc++.h>
using namespace std;
const int maxn=5e3+10;
const int INF=0x3f3f3f3f;
int fa[maxn][maxn];
int ans[maxn][maxn];
int head[maxn];
int l[maxn],r[maxn],c[maxn];
struct edge{
    int u,v,next;
}g[maxn<<1];
int cnt;
void add(int u,int v){
    g[cnt].u=u;
    g[cnt].v=v;
    g[cnt].next=head[u];
    head[u]=cnt++;
}
void dfs(int u,int f,int r){
    fa[r][u]=f;
    for(int i=head[u];~i;i=g[i].next){
        int v=g[i].v;
        if(v==f)continue;

        dfs(v,u,r);
    }
}
int main(){
    memset(head,-1,sizeof(head));
    int n;
    cin>>n;
    for(int i=1;i<n;i++){
        int u,v;
        scanf("%d%d",&u,&v);
        add(u,v);
        add(v,u);
    }
    for(int i=1;i<=n;i++){
        dfs(i,-1,i);
    }
    int m;
    cin>>m;
    bool flag=true;
    for(int i=1;i<=m;i++){
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        l[i]=u,r[i]=v,c[i]=w;
        while(u!=v){
            ans[v][fa[u][v]]=ans[fa[u][v]][v]=max(ans[fa[u][v]][v],w);
            v=fa[u][v];
        }
    }
    for(int i=1;i<=m;i++){
        int u=l[i],v=r[i],w=c[i];
        bool flag1=false;
        while(u!=v){
            if(ans[v][fa[u][v]]==w)
                flag1=true;
            v=fa[u][v];
        }
        if(!flag1){
            flag=false;
            break;
        }
    }
    if(flag){
        for(int i=1;i<n;i++){
            int I=(i-1)<<1;
            printf("%d%c",ans[g[I].u][g[I].v]?ans[g[I].u][g[I].v]:1000000,i==n-1?'\n':' ');
        }
    }
    else
        puts("-1");
    return 0;
}

发布了43 篇原创文章 · 获赞 6 · 访问量 1633

猜你喜欢

转载自blog.csdn.net/qq_44290978/article/details/104186449