标签: codeforces
A. Links and Pearls
代码
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