1794. Masterpieces of World Architecture

raw link:  http://acm.timus.ru/problem.aspx?space=1&num=1794


大致意思:

在一个环形数组中, 每个元素拥有一诉求 == 想要谋求新的位置.  为了让更多的元素得到满足, (你的移动方式只能是shift, 选定某个元素作定第一号位置,后面的维持顺时针移动) 

应该让哪个元素来当第一号?  ( 可以确定的是 有可行解, 但不一定是唯一解) 




思路:(语境:Ruby)
  

这个题目的思考方式应有很多, 我只列一种自己比较喜欢的,也应该表达起来 被理解起来方便的一种.  

公投式.   原来的每个元素(共n个) 各有自己想法, 难以统一起来,  因此需要借助某机理, 让他们统一比较 :   你如果要3, 那么谁来当1?   顺着这思路 --> 

  

     既然明确了移动方式 == shift.  说明当K号位置元素想要m时,  这与 他前面的 K-m这个位置元素想要第一 是等价的.   所以原来的表达方式如果是

共计6个元素  后面位置表示其诉求  . 最后表示其对应的等价1号说法

1 -> 3          --> 让5号 作一号

2 -> 2          --> 让1号 作一号

3 -> 4          --> 让6号 作一号

4 -> 1          --> 让4号 作一号

5 -> 3          --> 让3号 作一号

6 -> 5          --> 让2号 作一号


所以统计后面的元素  所有元素对哪个(哪些)元素的呼声最高,  那么, 就它了.  


注意事项: 

  在ruby中 对一维数组的索引可以使用负值方式, 因此可以理解为自带了一个循环表.  

 这大大减轻了计算的复杂  也省去了一段逻辑判断. 




--

现在的我 还不能以速度\memo的极致作为目标.  Accepted 就好 :) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值