找回密码
 立即注册
查看: 2328|回复: 33

【活动】苍海高级程序员试题

 关闭 [复制链接]

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

发表于 2013-11-3 14:24:13 | 显示全部楼层 |阅读模式
本帖最后由 yuebaosanqing 于 2013-11-3 16:13 编辑

得分70分以上可获得编程达人勋章(满分100,一个测试点10分)



矩形
(rect.pas/c/cpp)

【问题描述】
  因为对polo忍无可忍, dzf使用圣剑在地上划出了许多纵横交错的沟壑来泄愤。这些沟壑都严格与X轴平行或垂直。
  polo嘲笑了dzf无聊的行为,然后做了一件更加无聊的事。他蹲下来数这些沟壑的条数。数着数着,polo意识到一个问题,那就是因为圣剑的威力太大,划出的沟壑太多,地面就会塌陷。而如果两条水平的沟壑和两条垂直的沟壑相交组成了一个矩形,那么塌陷的危险就会进一步增加。现在polo已经数了n条沟壑,他想知道这些沟壑组成了多少个矩形。
【输入】
  第一行一个数n,接下来每行4个数x1,y1,x2,y2,表示沟壑的两个端点(x1,y1),(x2,y2)
【输出】
    一个数,组成的矩形个数。
【输入输出样例1】
rect.in        rect.out
4
0 0 1 0
0 0 0 1
1 1 1 -1
1 1 0 1        1
【输入输出样例2】
rect.in        rect.out
8
1 0 4 0
2 1 2 0
0 0 0 3
2 2 2 3
3 3 3 -1
0 3 4 3
4 1 -1 1
3 2 -1 2        6
【数据说明】  
  对于30%的数据,1<=n<=100
  对于60%的数据,1<=n<=600
  对于100%的数据,1<=n<=2000,坐标绝对值小于10^9,任意两条与X轴水平的沟壑之间没有交点,任意两条与X轴垂直的沟壑没有交点。

说明:这些试题是我们SUM班NOI训练的题目。有一定难度。大家可以根据自己的情况做一些小数据。
回复

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 14:25:40 | 显示全部楼层
附:本人不会网络编程,仅研究编程算法。。。
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 14:28:38 | 显示全部楼层
回帖仅作者可见,提交后会进行批处理测试
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2013-11-3 14:39:05 来自手机 | 显示全部楼层
→_→刚看完分治,矩阵直接略过了,没看明白楼主要说什么
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 15:12:55 | 显示全部楼层
Liberty 发表于 2013-11-3 14:39
→_→刚看完分治,矩阵直接略过了,没看明白楼主要说什么

就是一道题目啦
按题意写个程序玩玩好了。。
数据我这里有。
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 15:14:42 | 显示全部楼层
Liberty 发表于 2013-11-3 14:39
→_→刚看完分治,矩阵直接略过了,没看明白楼主要说什么

就是一问题求解啦。
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2013-11-3 15:34:50 来自手机 | 显示全部楼层
别回复我看不到→_→

点评

一个问题求解。。。  发表于 2013-11-3 20:34
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 16:13:15 | 显示全部楼层
Liberty 发表于 2013-11-3 15:34
别回复我看不到→_→

好吧
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2013-11-3 16:53:20 | 显示全部楼层
那个沟壑是无限延长的吗
While the truncheon may be used in lieu of conversation words will always retain their power.
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 17:36:03 | 显示全部楼层
Liberty 发表于 2013-11-3 16:53
那个沟壑是无限延长的吗

不是。直线的话太容易了。是线段
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2013-11-3 18:37:06 | 显示全部楼层
我眼花了怎么办
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 18:38:40 | 显示全部楼层
上邪 发表于 2013-11-3 18:37
我眼花了怎么办

T T
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2013-11-3 18:56:14 | 显示全部楼层
yuebaosanqing 发表于 2013-11-3 18:38
T T

求辅导
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-3 19:06:09 | 显示全部楼层
上邪 发表于 2013-11-3 18:56
求辅导

我只是竞赛编程有较深的研究,对于网络编程一窍不通的。
这道题目其实就是考察搜索的方式。
因为时限是1s(比赛中)。所以如果用n*n*n*N的搜索方式肯定会超时。
主要考察优化算法
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2013-11-4 06:39:33 | 显示全部楼层
yuebaosanqing 发表于 2013-11-3 19:06
我只是竞赛编程有较深的研究,对于网络编程一窍不通的。
这道题目其实就是考察搜索的方式。
因为时限是 ...

吓死,还以为写代码1s
回复 支持 反对

使用道具 举报

9012

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Rank: 10Rank: 10Rank: 10

伯爵荣耀

发表于 2013-11-4 12:26:09 | 显示全部楼层
做完这个还要继续做题目?
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-4 20:42:05 | 显示全部楼层
上邪 发表于 2013-11-4 06:39
吓死,还以为写代码1s

是运行时间1S以内
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2013-11-4 21:36:36 | 显示全部楼层
yuebaosanqing 发表于 2013-11-4 20:42
是运行时间1S以内

回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2013-11-4 21:38:01 | 显示全部楼层
@admin @龙 @小二 悲剧,网页卡了出那么多回帖,求删
回复 支持 反对

使用道具 举报

168

回帖

5193

基友

3318

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2013-11-10 10:41:44 来自手机 | 显示全部楼层
本来想直接全图flood一遍就是了……结果看到司马的绝对值小于一亿……OJ一秒运行忘了是一千万还是一亿来着,O(面积)都跪更别说搜的时候还要加个平方-_-

从数据规模来看给的提示应该是从n入手,那就每条进来的时候跑一遍,看能不能回到原点= =但是,效率又是极低

所以试着每条边进来的时候,在边的每个点做个标记,搜的时候跑一遍标记,没有与别的边重叠的点直接跳过,搜索的时候也从重叠部分开始搜

搜的时候记得加路障,即被确定的矩形四个顶点都不能再搜,否则你会看到你的答案会大好多(目测普通刀和一刀分两半两种情况下多出来的矩形数不太一样……没有具体分析反正会跪就对……)

应该就是这样吧……懒得写代码了……随便说说思路……至于搜索方法嘛= =深广本质都一样,这里是求数量不是求最优解看起来像DFS……具体的没去想……广搜在这道题讨不到什么便宜没必要大费周张去建队列(反正我有建有错……)

最后看看效率……应该不会太可怕……(目测是交点个数的四次方?)应该至少前面那60分能够骗来……
回复 支持 反对

使用道具 举报

168

回帖

5193

基友

3318

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2013-11-10 10:43:42 来自手机 | 显示全部楼层
yuebaosanqing 发表于 2013-11-3 17:36
不是。直线的话太容易了。是线段

直线是能用数学直接得出公式或者递推是么……
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-10 17:50:33 | 显示全部楼层
灵符 发表于 2013-11-10 10:43
直线是能用数学直接得出公式或者递推是么……

是的。
回复 支持 反对

使用道具 举报

168

回帖

5193

基友

3318

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2013-11-11 12:05:41 来自手机 | 显示全部楼层
yuebaosanqing 发表于 2013-11-10 17:50
是的。

昨天晚上没事想了想……好像搜索的时候是要找最优解所以应该是WFS不是DFS上面写错了…搜的时候要记录交点个数只有四个交点的才是矩形(防止两个矩形重叠生成一个矩形两个六边形)地图目测会很大,所以地图切成多个数组或者用求余数法碰运气骗分

恩目测是这样的
回复 支持 反对

使用道具 举报

168

回帖

5193

基友

3318

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2013-11-11 12:07:11 来自手机 | 显示全部楼层
yuebaosanqing 发表于 2013-11-10 17:50
是的。

交点个数同时可以用来剪枝
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-12 21:53:58 | 显示全部楼层
灵符 发表于 2013-11-11 12:05
昨天晚上没事想了想……好像搜索的时候是要找最优解所以应该是WFS不是DFS上面写错了…搜的时候要记录交点 ...

这道题目其实可以用二分查找来完成。
以每一个横向坐标为扫描循环变量处理
回复 支持 反对

使用道具 举报

168

回帖

5193

基友

3318

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2013-11-13 11:55:30 来自手机 | 显示全部楼层
yuebaosanqing 发表于 2013-11-12 21:53
这道题目其实可以用二分查找来完成。
以每一个横向坐标为扫描循环变量处理

二分?找什么
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-11-16 17:47:54 | 显示全部楼层
灵符 发表于 2013-11-13 11:55
二分?找什么

对于每一条竖直的边,枚举在其范围内的横向边。(对横向边排序,二分查找两个端点)
回复 支持 反对

使用道具 举报

87

回帖

150

基友

401

积分

凡人3阶 Lv.3

Rank: 2

发表于 2013-11-26 00:45:23 | 显示全部楼层
没有然后了
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2013-12-7 08:59:38 | 显示全部楼层
灵符 发表于 2013-11-10 10:41
本来想直接全图flood一遍就是了……结果看到司马的绝对值小于一亿……OJ一秒运行忘了是一千万还是一亿来着, ...

其实应该是从边进行排序搜索
回复 支持 反对

使用道具 举报

169

回帖

405

基友

660

积分

通神1段 Lv.4

Rank: 2

发表于 2013-12-8 00:11:37 | 显示全部楼层
编程不一定要弄懂这些吧,除非要做大牛,编点小软件,我觉得这种不太需要了解
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2024-12-27 08:53 , Processed in 0.089787 second(s), 30 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部