您的位置:首页 > 其它

POJ 2665 水题

2009-10-19 02:01 344 查看
宁波现场热身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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: