首页
社区
课程
招聘
......
发表于: 2005-6-5 23:33 10967

......

2005-6-5 23:33
10967
收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有算法板块吧

http://bbs.pediy.com/forumdisplay.php?s=&forumid=26
2005-6-6 01:06
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
3
没有看到老罗在说什么
2005-6-6 09:10
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
4
USACO 2.1 Shaping Regions

Shaping Regions

形成的区域
译 by tim green


  N个不同的颜色的不透明的长方形(1 <= N <= 1000)被放置在一张宽为A长为B的白纸上。
这些长方形被放置时,保证了它们的边于白纸的边缘平行。
所有的长方形都放置在白纸内,所以我们会看到不同形状的各种颜色。
坐标系统的原点(0,0)设在这张白纸的左下角,而坐标轴则平行于边缘。

PROGRAM NAME: rect1

INPUT FORMAT
每行输入的是放置长方形的方法。
第一行输入的是那个放在底的长方形(即白纸)。
第 1 行:       A , B 和 N, 由空格分开 (1 <=A, B<=10,000)
第 2 到N+1行:  为五个整数 llx, lly, urx, ury, color 这是一个长方形的左下角坐标,右上角坐标和颜色。
颜色 1和底部白纸的颜色相同。

SAMPLE INPUT (file rect1.in)
20 20 3
2 2 18 18 2
0 8 19 19 3
8 0 10 19 4

OUTPUT FORMAT
输出文件应该包含一个所有能被看到颜色连同该颜色的总面积的清单( 即使颜色的区域不是连续的),按color的增序顺序。
不要显示没有区域的颜色。

SAMPLE OUTPUT (file rect1.out)
1 91
2 84
3 187
4 38
2005-6-6 10:12
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
5
这道题难得简直叫人没语言了,梦魇啊,做的时候真的想吐血!好几次都想cheat过去算了,幸好最后都还是坚持了下来。记录:WA一共11次,TLE一共9次,刚好在第21次时才过了。总共耗时7天,每天熬夜就是为了对付它!在AC的那一瞬间的那种快感简直是无法形容!

此题刚一拿到手,感觉不难,貌似用floodfill就能过,但实际上深入一想才知道厉害――由于空间、时间复杂度的关系,必须用矩阵切割或者离散化+线段树。矩阵切割太麻烦(偶的空间想象力不够),放弃。最终偶用了离散化+线段树来完成。

本来想写一篇垃圾再加上偶的C源程序来讲解一下偶的思路的,但考虑到跟这个板块内容不符,作罢。
2005-6-6 10:15
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
6
老罗想到好的算法了么
2005-6-6 10:26
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
7
说一下思路吧,这个东西入手了才发现处处陷阱。

IOI里面可没有这么BT的东西
2005-6-6 10:28
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
8
算了,先别公布思路了。留一段考虑的时间
2005-6-6 10:30
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
9
最初由 luocong 发布

必须用矩阵切割或者离散化+线段树。矩阵切割太麻烦(偶的空间想象力不够),放弃。最终偶用了离散化+线段树来完成。



原来楼主就是老罗...

啊,没大没小的,不要打我啊

上面的算法没听说过

我的第一感觉,不知道对不对:
把矩形都存起来反正也不多),接下来就利用二重循环检索rect数组。
矩形数组rect[1000],矩形个数num ;
颜色:COLOR[N]
for ( i = 0; i < rect_x; i++ )
{
   for ( j = 0; j < rect_y; j++ )
   {
       for ( k = num - 1; k >= 0 ;k - - )
       {
            if ( 坐标(i,j)在 rect[k]内 )
            {
                  //若rect[k]所对应颜色为X ;
                  COLOR[X]++ ;
                  break ;
            }
       }
    }
}

最后把COLOR[N]输出就可以了。

算法复杂度也不高,不知道行不行
2005-6-6 12:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
比较深邃阿
2005-6-6 13:13
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
11
这类问题的常见解法就是线段树+离散化,具体可以参看陈宏前辈(对我来说是前辈)的经典论文附件:paper.rar

我遇见的几个这类的题都规模不大,直接离散化一下用个数组就过了,还没写过线段树 线段树真的很烦的说

这类问题可以讨论的吧,monkeycz和我都很感兴趣的哟
2005-6-6 13:42
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
12
To 北极星2003:

你的算法复杂度很高,是O(A*B*N),A,B是10000,N是1000,基本上是不能忍受的.而且内存也太大了,要rect[10000][10000]

ps: 竞赛题程序的运行时间,占用内存都有限制的,一般内存是32M或64M,时间常见的是1s,基本没有超过10s的.
2005-6-6 13:51
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
13
对,陈宏的论文讲得很清楚了。不过在这道题里,我简化了他的算法,只用到了insert操作。算法过程如下:

1、离散化
2、删除重复的坐标
3、逐条扫描y轴,在这过程中对x轴建立线段树

最后的复杂度为O(nlogn)。用时1.45s,还能优化,不过我懒得做了。
2005-6-6 14:14
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
14
这道题最后给我的感觉是用线段树反而更慢了,其实直接开个大小为 2 * N 的数组反而会快点。线段树属于高级数据结构?只是平衡树而已,感觉还不如我以前写的AVL树复杂。
2005-6-6 14:18
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
15
好像没必要讲了,大家去看论文吧
2005-6-6 14:19
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
16
能不能给个地址(递交系统)?
这个题目我要好好学习一下。
说不定明年ACM还有用
用问题再向各位请教
2005-6-6 14:50
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
17
最初由 luocong 发布
这道题最后给我的感觉是用线段树反而更慢了,其实直接开个大小为 2 * N 的数组反而会快点。线段树属于高级数据结构?只是平衡树而已,感觉还不如我以前写的AVL树复杂。


可能吧,反正我一直都是开个2*N的数组来做的,也没见有多慢。
AVL树。。。更寒了。。。我没信心在比赛的时候写出来 好像这些题目用到AVL树的也很少,(可能是我太弱了。。。)
2005-6-6 14:51
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
18
最初由 RoBa 发布
这类问题可以讨论的吧,monkeycz和我都很感兴趣的哟

同意
2005-6-6 15:12
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
老罗似乎要放弃自己的坛子了,也许放弃是件好事.....
2005-6-6 15:31
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
20
最初由 北极星2003 发布
能不能给个地址(递交系统)?
这个题目我要好好学习一下。
说不定明年ACM还有用
用问题再向各位请教


各测试系统的地址我写在置顶贴里了
2005-6-6 16:08
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
21
最初由 dREAMtHEATER 发布
老罗似乎要放弃自己的坛子了,也许放弃是件好事.....


没错,放弃了
2005-6-6 16:11
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
22
最初由 北极星2003 发布
能不能给个地址(递交系统)?
这个题目我要好好学习一下。
说不定明年ACM还有用
用问题再向各位请教


像我一样的初学者建议去USACO,它的题比较静电,而且是由浅入深的,涵盖哥哥领域,最爽的是做对了还能看官方的解答……

USACO:
http://ace.delos.com/usacogate

它比较BT的地方是必须做完了一个Section的所有题之后才能进入下一环节。不过这也好,心态会比较平静,不然老想着提高数量了,导致质量上不去……
2005-6-6 16:14
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
23
最初由 luocong 发布


像我一样的初学者建议去USACO,它的题比较静电,而且是由浅入深的,涵盖哥哥领域,最爽的是做对了还能看官方的解答……

USACO:
........


老罗还是初学者???
那我是什么了??幼稚园 ?

可能这样的网站比较适合我
做ACM的时候,难的不会,简单的看了就生气,半小时能AC好几个。
而且那么多题目不知道从哪里开始,哎~~
现在想想,感觉这样做太浮躁了
2005-6-6 16:31
0
游客
登录 | 注册 方可回帖
返回
//