找回密码
 欢迎注册
查看: 6732|回复: 2

[求助] 再问一个问题!

[复制链接]
发表于 2010-1-27 18:23:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
遇到一个问题,开始我以为很好实现,结果很麻烦:
有A,B两个人,外加一个x*y的棋盘,n个相同的石子,A做如下的事:
  • 把棋盘打扫干净。
  • 把n个石子按他自己的心意摆放在棋盘上
  • 重复步骤1.


而B要做的可以选择以下2种:
  • 监视A的每一次摆放,一旦发现A连续有100次在棋盘的同一个位置摆放石子,提醒A;
  • 对A的每一次摆放,对A的摆放打分,然后分数反馈给A,以便A参考。打分的依据:对每个石子,连续出现在同一点的次数越多则分数越低。(注意石子是相同的。)

(注:假设A要摆放100000次,并不是在A摆放完了B才通知A。对第1题,只要且仅要A有某个连续100次在同一点的石子,就通知A;对第2题,则A每摆一次,都要通知A的得分。)


问题:
请问 B如何实现这2项任务?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-27 21:47:15 | 显示全部楼层
只要维护两张列表即可。

第一张表是A上次放的坐标:

$(x_1,y_1),(x_2,y_2),(x_3,y_3),...,(x_n,y_n)$

第二张表是A这次放的坐标:

$(X_1,Y_1),(X_2,Y_2),(X_3,Y_3),...,(X_n,Y_n)$

如果x*y不大,可以用一个二维数组记录每个位置的连续摆放次数。

步骤如下:

把第二张表对应的位置全部标记并把该位置的连续摆放次数加1(对于问题1,满100给提示;对于问题2,记录最大值)。

逐个检查第一张表对应的位置:如果该位置未作标记,则该位置的连续摆放次数清零,否则不做任何操作。

根据第二张表把之前所作的标记去掉。

把第二张表的内容覆盖到第一张表上。

读入A下一次的摆放坐标,记录到第二张表上。

以上步骤重复执行。

如果x*y太大,以至于无法用二维数组记录每个位置的连续摆放次数,那么给两张表排序。

对于第二张表,按顺序检查里面的坐标是否也在第一张表中。

如果在,那么当前位置的连续摆放次数根据第一张表的记录加1得到;

否则记当前位置的连续摆放次数为1。

把第二张表中的坐标以及连续摆放次数的记录覆盖到第一张表中。

读入A下一次的摆放坐标,记录到第二张表上。

重复以上步骤。

没有不好实现的地方,也没有很麻烦的地方。

不知道楼主遇到了什么问题。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-28 16:30:03 | 显示全部楼层
谢谢!今天已经想到了办法,我是记录一个x*y大小的数组来实现。
不过看到了版主的回答,才觉得此帖没有白写,哈哈,居然用两个小的数组就解决了!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-3 19:19 , Processed in 0.059499 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表