AtCoder Beginner Contest 067(CD)
C - Splitting Pile
思路:预处理前后缀,暴力即可。
D - Fennec VS. Snuke
思路:考虑所有点到 1 , n 1,n 1,n的距离,谁的距离较小这个点就属于谁。
距离相同属于先手,因为先手可以先走一步。
所以最后统计属于1的点数 s s s,和属于 n n n的点数 n − s n-s n−s.
若 s > n − s s>n-s s>n−s则先手赢,反之后手胜。
如果 s = n − s s=n-s s=n−s是后手胜,因为先手不能再走了。
void dfs(int u,int fa){
dis[op][u]=dis[op][fa]+1;
for(int v:e[u]){
if(v!=fa) dfs(v,u);
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
e[u].pb(v),e[v].pb(u);
}
dfs(1,0);
op=1;
dfs(n,0);
int s=0;
for(int i=1;i<=n;i++) s+=dis[0][i]<=dis[1][i];
puts(s>n-s?"Fennec":"Snuke");