楼主: 〇〇

[精华] ACM题(#2634 Collecting Stones)

[复制链接]
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
41#
发表于 2011-4-12 11:19 | 只看该作者
注意每个行,列,可能出现不同的形状,价值的记录

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
42#
 楼主| 发表于 2011-4-12 11:19 | 只看该作者
原帖由 lugionline 于 2011-4-12 11:18 发表
1. 不要保留路径,只需要保留一个形状就可以了(64bit,每个bit表示是否访问过)
2. 搜索1-4列,得到从开始点出发到达第四列每个位置的记录
3. 搜索8-5列(反向),得到从结束点到达第5列每个位置的记录
4. 每个位置的记录可以这样表示 行,列,形状,价值
5. 匹配2和3搜索的结果

我就是2345实现的,但效率还差很远

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
43#
发表于 2011-4-12 11:36 | 只看该作者
[0, 0]        Count = 1       
[0, 1]        Count = 1       
[0, 2]        Count = 1       
[0, 3]        Count = 1       
[0, 4]        Count = 1       
[0, 5]        Count = 1       
[0, 6]        Count = 1       
[0, 7]        Count = 1       
[1, 0]        Count = 15       
[1, 1]        Count = 15       
[1, 2]        Count = 15       
[1, 3]        Count = 15       
[1, 4]        Count = 15       
[1, 5]        Count = 15       
[1, 6]        Count = 15       
[1, 7]        Count = 15       
[2, 0]        Count = 218       
[2, 1]        Count = 218       
[2, 2]        Count = 218       
[2, 3]        Count = 218       
[2, 4]        Count = 218       
[2, 5]        Count = 218       
[2, 6]        Count = 218       
[2, 7]        Count = 218       
[3, 0]        Count = 3165
[3, 1]        Count = 3165
[3, 2]        Count = 3165
[3, 3]        Count = 3165
[3, 4]        Count = 3165
[3, 5]        Count = 3165
[3, 6]        Count = 3165
[3, 7]        Count = 3165

大致计算了下,后面count是形状的数量,总数大概在3万左右,应当不会很慢吧,没用SQL写

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
44#
发表于 2011-4-12 12:04 | 只看该作者
2,3这个过程是很快的,基本上毫秒数量级(C#)

至于后面的匹配,我觉得可以用开一个bit数组(数量不超过2000001),然后循环8次处理第四列每行的数据,应当很快就能完成

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
45#
 楼主| 发表于 2011-4-12 12:07 | 只看该作者
[0,0]是c语言的数组?

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
46#
发表于 2011-4-12 12:11 | 只看该作者
当然SQL的做法可以把两个结果集链接起来找需要价值的记录,然后查行的差异+1, 0 -1的记录可能慢点,但慢不到哪里去吧? 才3万×3万啊。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
47#
 楼主| 发表于 2011-4-12 12:14 | 只看该作者

回复 #46 lugionline 的帖子

貌似30毫秒440K也算不出来

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
48#
发表于 2011-4-12 12:34 | 只看该作者
是坐标位置,表示从0,0开始到达这个点的记录数
貌似我少算了几种

第一列只有1种,第二列好像有22种 (6 * 3 + 2 * 2), 大致估计是 8 * 3

第三例差不多应当 8 * 3 * 8 * 3 = 576,第四列 576 * 24 = 13824

这样总共大概10万条记录的样子

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
49#
发表于 2011-4-12 12:36 | 只看该作者
原帖由 〇〇 于 2011-4-12 12:14 发表
貌似30毫秒440K也算不出来


人家是 C啊,谁让你用SQL去比的啊

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
50#
发表于 2011-4-12 12:56 | 只看该作者
不可思议,发现程序中少写了一个方向,这下该对了

[0, 0]        Count = 1       
[0, 1]        Count = 1       
[0, 2]        Count = 1       
[0, 3]        Count = 1       
[0, 4]        Count = 1       
[0, 5]        Count = 1       
[0, 6]        Count = 1       
[0, 7]        Count = 1       
[1, 0]        Count = 22       
[1, 1]        Count = 22       
[1, 2]        Count = 22       
[1, 3]        Count = 22       
[1, 4]        Count = 22       
[1, 5]        Count = 22       
[1, 6]        Count = 22       
[1, 7]        Count = 22       
[2, 0]        Count = 450       
[2, 1]        Count = 450       
[2, 2]        Count = 450       
[2, 3]        Count = 450       
[2, 4]        Count = 450       
[2, 5]        Count = 450       
[2, 6]        Count = 450       
[2, 7]        Count = 450       
[3, 0]        Count = 9174
[3, 1]        Count = 9174
[3, 2]        Count = 9174
[3, 3]        Count = 9174
[3, 4]        Count = 9174
[3, 5]        Count = 9174
[3, 6]        Count = 9174
[3, 7]        Count = 9174

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表