SRM 481 div2

来源:互联网 发布:ipower手指充电软件 编辑:程序博客网 时间:2024/05/17 07:27

 

       虽然比较失败,但是总结还是要写的.

       第一题 CircleMarket 比较简单,遍历一遍得到最终的关门时间endTime,然后单纯的模拟就行了,从时间0开始到endTime,累加移动的时间,判断一下,endTime的时候就得到买了多少东西了.

       第二题ChickenOracle想了好久还是不得要领,最终参考了各大牛的代码,但是逻辑依然乱的很.最终用下图表示终于清晰了.整个的n个人可以分为如下的4部分.如果设第三部分的人数为x的话,则第一部分就是lieCount-x,第二部分则是n+x-lieCount-liarCount,第四部分则是liarCount-x.

       这样就比较清晰了,柯南说过,真像只有一个,那么最终说出的真像的个数(并不是真实真像的个数)就是第二部分和第三部分的和。然后假设一个真像,是鸡或者是蛋,然后各部分的数值均>=0即可。

       比如说,先有蛋是真像,那么eggCount=x+(n+x-lieCount-liarCount);那么用这个式子可以得出x=(eggCount-n+lieCount+liarCount)/2,如果eggCount-n+lieCount+liarCount2的倍数,同时,4个部分均>=0,即x>=0 && lieCount>=0 && n+x-lieCount-liarCount>=0 && liarCount-x>=0,那么我们可以说,这样的x是存在的,即先有蛋是可能的。

       现有鸡的做法也一样,只不过公式变为n-eggCount=x+(n+x-lieCount-liarCount);后面的推理类似。

 

1 未知真相

说真话

2 知真相

说真话

3 未知真相

说假话

4 知真相

说假话

       第三题BatchSystem也很简单,就是操作系统中的短作业优先,贪心算法,需要注意的就是int的精度不够处理中间的的计算过程,即每个人的总的作业耗时。还有就是注意输出的格式,是要字典序的。