D. Christmas Trees
显然对于一个中间的点 要是不能向两边最近的扩展 我们直接判定他没有用处了
这样我们就有了bfs的做法 我们先把原点放进去要是能扩展
我们显然可以直接扩展 否则直接将其删去 这里有个小技巧就是mp.count要是0的话也是算的
还有这道题不知道咋回事有点卡常 线性做法跑了800ms 怪
map<int,int>d;
queue<int>q;
vector<int>ans;
int n,m,res;
void bfs(){
while(ans.size()<m){
auto t=q.front();q.pop();
if(d[t])ans.push_back(t);
res+=d[t];
if(d.count(t+1)==0)d[t+1]=d[t]+1,q.push(t+1);
if(d.count(t-1)==0)d[t-1]=d[t]+1,q.push(t-1);
}
cout<<res<<endl;
}
void solve(){
cin>>n>>m;
for(int i=0;i<n;i++){int x;cin>>x,q.push(x),d[x]=0;}
bfs();
for(auto i:ans)cout<<i<<' ';cout<<endl;
}
标签:int,611,Codeforces,bfs,ans,Div
From: https://www.cnblogs.com/ycllz/p/16849390.html