POJ 2665 水题

 宁波现场热身C

水题啊。。。


一眼看到题,马上想到线段树,不想离散化,又只有一维,果断矩形分割 RE,原因未考虑线段未相交情况,加上后AC 结果在DISCUSS里看到了这么一句 It is confirmed that these sections do not overlap with each other. 马上囧了 要认真读题啊 #include <stdio.h> int line[5005*4][2]; int m; void Add(int a,int b) { ++m; line[m][0]=a; line[m][1]=b; } void Delete(int &i) { line[i][0]=line[m][0]; line[i][1]=line[m][1]; --m; } int main() { int L,M; while(scanf("%d%d",&L,&M)) { if (!L && !M) break; m=-1; int a,b; while(M--) { scanf("%d%d",&a,&b); int mm=m; for (int i=0;i<=mm;i++) { if (!((line[i][0]>=b)||(line[i][1])<=a)) { if (line[i][0]<a) Add(line[i][0],a-1); // 每个点不能重复算,所以线段不相交要加强到 if (b<line[i][1]) Add(b+1,line[i][1]); // 点不相交 Delete(i); } } Add(a,b); } for (int i=0;i<=m;i++) L-= (line[i][1]-line[i][0]+1); printf("%d/n",L+1); } }


其实区间是不互相覆盖的

#include <stdio.h> int main() { int L,M,a,b; while(scanf("%d%d",&L,&M)&&L) { while(M--) { scanf("%d%d",&a,&b); L-= (b-a+1); } printf("%d/n",L+1); } }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值