做题记录22.3.31 洛谷P2250
由于CSDN新增了字数限制,即日起本人开始转战博客园
这题我原本的想法是:按先x后y的升序排序,随后对于任意一个i,查找和i+1相交的部分,并在这部分从右往左种树。最后进行检查,把不满足条件的地点种上树即可。但这种方法好像难以实现,因为情况比较多,比如完全包含、部分相交、完全不相交等。
其实可以这样思考:既然要种得尽可能少,那么完全可以在每一个区间都从右向左。但应当按照先y后x升序排序。否则会导致 一个区间完全包含在另一个区间的情况出现错误。
sort(a+1,a+h+1,[&](Tree a,Tree b) {
return (r<a.r)||(r==a.r&&l<a.l);
});
for(int i=1; i<=h; i++) {
//检查
for(int j=a[i].r; j>=a[i].l; j--) {
if(vis[j]) cnt[i]++;
}
//在尾部种树
for(int j=a[i].r; j>=a[i].l&&cnt[i]<a[i].c; j--) {
if(!vis[j]) {
vis[j]=1;
cnt[i]++;
}
}
}
//最后检查
for(int i=1; i<=a[h].r; i++) {
if(vis[i]) res++;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现