关于 zju1375 的讨论

jwd_1_cool 2003-08-08 04:25:42
我用贪心 wa 了

那应该是什么办法???
...全文
38 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmmcd 2003-08-10
  • 打赏
  • 举报
回复
西安电子科技大
jwd_1_cool 2003-08-10
  • 打赏
  • 举报
回复
结帐前,想问问,^超超^ 和 kbsoft(景乐) 是什么学校啊! 今年去北京吗?
jwd_1_cool 2003-08-10
  • 打赏
  • 举报
回复
对不起,这两天都没来看,在这时间里这道程序我已经AC了!
其实贪心的策略也很多种!我一开始采用的是

找出所有超过K的 纵坐标 ,然后找一堵覆盖最多的墙!其实这种想法是错的,所以当时WA了

后来 采用 逐点判断,删除对后面影响最大,就AC了!

看了一下,^超超^的程序应该也是这个方法! 呵呵,仍然 3x !

kbsoft 2003-08-08
  • 打赏
  • 举报
回复
^超超^好强!~ D
mmmcd 2003-08-08
  • 打赏
  • 举报
回复
#include<iostream>
#include<fstream>
#include<vector>
#include<memory.h>
#define fin cin
using namespace std;
//ifstream fin("1375.in");

int g[101];
int n,k;
class wall
{
public:
int fx,fy;
int tx,ty;
}w[100];

void input()
{
int i,j,t;
memset(g,0,sizeof(g));
fin>>n>>k;
for(i=0;i<n;i++)
{
fin>>w[i].fx>>w[i].fy>>w[i].tx>>w[i].ty;
if(w[i].fx>w[i].tx)
{
t=w[i].fx;
w[i].fx=w[i].tx;
w[i].tx=t;
}
for(j=w[i].fx;j<=w[i].tx;j++)
{
g[j]++;
}
}
}

void Delete(int k)
{
int i,mi,max=-1;
for(i=0;i<n;i++)
{
if(w[i].fy>=0 && w[i].fx<=k && w[i].tx>=k)
{
if(w[i].tx-k > max)
{
max=w[i].tx-k;
mi=i;
}
}
}
w[mi].fy=-1;
for(i=w[mi].fx;i<=w[mi].tx;i++)
{
g[i]--;
}
}

void proc()
{
int i,c=0;
for(i=0;i<=100;i++)
{
if(g[i]>k)
{
Delete(i);
c++;
i--;//少这句,WA
}
}
cout<<c<<endl;
}

int main()
{
int t;
for(fin>>t;t;t--)
{
input();
proc();
}
return 0;
}
mmmcd 2003-08-08
  • 打赏
  • 举报
回复
有没有考虑输入的墙下标可能从右到左?
mmmcd 2003-08-08
  • 打赏
  • 举报
回复
就是用贪心

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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