# Codeforces Round #480 (Div. 2)

标签: codeforces


代码

expand

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
int main(int argc, char const *argv[])
{
    string s;
    cin>>s;
    int a=0,b=0;
    for (int i = 0; i < s.size(); ++i)
    {
        if(s[i]=='-') a++;
        else b++;
    }
    if(b==0||a%b==0) printf("YES\n");
    else printf("NO\n");
    return 0;
}

C. Posterized

代码

expand

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
const int maxn=100050;
int f[300],x,sz[300];
int main(int argc, char const *argv[])
{
    int n,k;
    scanf("%d%d", &n,&k);
    memset(f,-1,sizeof f);
    for (int i = 0; i < n; ++i)
    {
        scanf("%d", &x);
        if(f[x]!=-1) printf("%d ", f[x]);
        if(f[x]==-1){
            int s=0;
            for (int j = max(0,x-k+1); j <= x; ++j)
            {
                if(f[j]==-1||x-f[j]+1<=k){
                    s=j;
                    break;
                }
            }
            if(f[s]==-1){
                for (int j = s; j <= x; ++j)
                {
                    f[j]=s;
                }
            }
            else{
                for (int j = s; j <= x; ++j)
                {
                    f[j]=f[s];
                }
            }
            printf("%d ", f[x]);
        }
    }
    return 0;
}

D. Perfect Groups

留坑

expand

E. The Number Games

代码

expand

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1000050;
struct Edge{
    int v,nxt;
}e[maxn*2];
int h[maxn],tot;
void addEdge(int x,int y){
    e[++tot]=(Edge){y,h[x]};
    h[x]=tot;
}
int n,k;
int f[maxn][30],dep[maxn];
void dfs(int x,int fa){
    dep[x]=dep[fa]+1;
    f[x][0]=fa;
    for(int i = 1; f[x][i-1]; ++i){
        f[x][i]=f[f[x][i-1]][i-1];
    }
    for(int i = h[x]; i ; i = e[i].nxt){
        if(e[i].v!=fa)  dfs(e[i].v,x);
    }
}
bool mark[maxn];
void insert(int x){
    if(mark[x]) return;
    int p=x;
    for(int i = 20; i >= 0; --i){
        int t=f[p][i];
        if(!mark[t]) p=f[p][i];
    }
    p=f[p][0];
    if(k<dep[x]-dep[p]) return;
    while(x!=p) mark[x]=true,x=f[x][0],k--;
}
int main(){
    scanf("%d%d", &n,&k);
    for(int i = 1; i < n; ++i){
        int x,y;
        scanf("%d%d", &x,&y);
        addEdge(x,y);
        addEdge(y,x);
    }
    dfs(n,0);
    mark[0]=true;
    int x=n;
    k=n-k;
    while(k&&x) insert(x--);
    for(int i = 1; i <= n; ++i){
        if(!mark[i]) printf("%d ", i);
    }
    printf("\n");
}

F. Cactus to Tree

留坑

expand

猜你喜欢

转载自www.cnblogs.com/sciorz/p/9013646.html