USACO Milking Cows (Complete Search)
数学模型:在数轴上画n条线段,求最长的连续线段的长度和最长的空白的长度(线段间的空白)。
分析:读数据时只读入有效线段,被其他线段完全覆盖的略去,然后根据线段的起点排序,此时相邻线段要么中间有空白,要么相交,若相交则合并为一条线段,经过处理后得到cnt条互不相交的线段,此时统计结果即可。

/* ID: lijian42 LANG: C++ TASK: milk2 */ #include <stdio.h> #include <stdlib.h> #define MAX(a,b) ((a)>(b)?(a):(b)) #define N 5001 int n; struct node { int start,end; }; node famer[N]; int top; void insert(int x,int y) { int i; bool flag=false; for(i=0;i<top;i++) { if(x>=famer[i].start && y<= famer[i].end) return; if(x<=famer[i].start && y>=famer[i].end) { flag=true; famer[i].start=x; famer[i].end=y; } } if(!flag) { famer[top].start=x; famer[top++].end=y; } } int cmp(const void *a,const void *b) { node *c,*d; c=(node*)a; d=(node*)b; return c->start-d->start; } int main() { freopen("milk2.in","r",stdin); freopen("milk2.out","w",stdout); int i,j,x,y,cnt; int ans1,ans2; while(~scanf("%d",&n)) { for(i=0;i<n;i++) { scanf("%d%d",&x,&y); insert(x,y); } qsort(famer,top,sizeof(famer[0]),cmp); cnt=0; i=0; while(i<top) { for(j=i+1;j<top;j++) { if(famer[i].end>=famer[j].start) { famer[i].end=famer[j].end; } else break; } famer[cnt].start=famer[i].start; famer[cnt++].end=famer[i].end; i=j; } ans1=0; ans2=0; for(i=0;i<cnt;i++) { ans1=MAX(ans1,famer[i].end-famer[i].start); if(i+1<cnt) ans2=MAX(ans2,famer[i+1].start-famer[i].end); } printf("%d %d\n",ans1,ans2); } return 0; }
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 复杂业务系统线上问题排查过程
· 通过抓包,深入揭秘MCP协议底层通信
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
· 为大模型 MCP Code Interpreter 而生:C# Runner 开源发布
· 还在手写JSON调教大模型?.NET 9有新玩法
· 面试时该如何做好自我介绍呢?附带介绍样板示例!!!
· JavaScript 编年史:探索前端界巨变的幕后推手
· 独立开发:高效集成大模型,看这篇就够了