POJ1177我哪里出问题了,求大牛?

qifeifei 2010-08-01 10:30:27
#include "algorithm"
#include "time.h"
#include "iostream"
#include "vector"
#include "math.h"
using namespace std;
struct node
{
int y1,y2;
int x;
char ch;
};

vector <node> V;

void insert_sort(vector <node>&V,node temp)
{
int i;
if(V.size()==0) {V.push_back(temp);return;}
i=0;
while(temp.x>V[i].x&&i<V.size())
i++;
if(i<V.size()) V.insert(&V[i],temp);
else V.push_back(temp);
}
bool cmp(node a,node b)
{
if(a.x<b.x) return true;
else return false;
}

int main(int argc, char* argv[])
{
int num,i,k;
int x1,y1,x2,y2;
node temp;
cin>>num;
for(i=0;i<num;i++)//一共长方形num个,也就是2*num个平行与Y轴的线段
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
temp.y1=y1;
temp.y2=y2;
temp.x=x1;
temp.ch='s';
V.push_back(temp);
temp.x=x2;
temp.ch='e';
V.push_back(temp);
}
sort(V.begin(),V.end(),cmp);//对其按照X横坐标进行从小到大排序线段
temp=V[0];
V.insert(V.begin(),temp);

int seg,old_seg,m,old_m,c;
long result=0;
vector <node> V2;
vector <node>::iterator it;
for(old_seg=0,old_m=0,i=1;i<=2*num;i++)
{
if(V[i].ch=='s')
{
temp.x=V[i].y1;
temp.ch='s';
insert_sort(V2,temp);
temp.x=V[i].y2;
temp.ch='e';;
//sort(V2.begin(),V2.end(),cmp);这一步要优化
insert_sort(V2,temp);
}
else
{
for(it=V2.begin();it<=V2.end();it++)
if(V[i].y1==it->x)
{V2.erase(it);break;}
for(it=V2.begin();it<=V2.end();it++)
if(V[i].y2==it->x)
{V2.erase(it);break;}
}
for(seg=0,m=0,c=0,k=0;k<V2.size();k++)
{
if(c!=0)
m+=V2[k].x-V2[k-1].x;
if(V2[k].ch=='s')
c++;
else
c--;
if(c==0)
seg++;
}
result+=2*old_seg*(V[i].x-V[i-1].x)+(float)abs(m-old_m);
old_seg=seg;
old_m=m;
}
cout<<(int)result<<endl;
return 0;
}
...全文
45 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hw19886200 2010-08-12
  • 打赏
  • 举报
回复
这种问题真的不想再看了,很基本的东西啊。
饭fan有引力 2010-08-01
  • 打赏
  • 举报
回复
有什么问题可以说下吗,我就知道编译不会出错而已

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧