贪心...先枚举k, 然后从左往右扫一遍, 发现位置p的牛的状态不符合就将 [p, p + k ) 的牛都转身, 假如p + k - 1 已经超过了最右边牛的位置那这个k就不符合要求. 符合要求的就可以用来更新answer.这个贪心的正确性是很显然的.前p - 1头牛都已朝前, 再改动它们也做不到更优; 而要让第p头牛转身, 那就只能让[p, p + k )的牛转身.
考虑如何判断位置p的牛的状态, 我们发现p的状态与它本身和[ p - k - 1, p )这个区间内的牛的转身次数有关, 因为转身两次相当于没转, 用异或进行操作可以做到O(1). 枚举O(n), 扫描O(n), 总时间复杂度为O(n²)
-------------------------------------------------------------------
-------------------------------------------------------------------
1704: [Usaco2007 Mar]Face The Right Way 自动转身机
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 313 Solved: 183
[Submit][Status][Discuss]
Description
Input
Output
一行两个数,分别是K和M,中间用空格隔开
Sample Input
B
B
F
B
F
B
B
INPUT DETAILS:
There are seven cows and they are facing backward, backward, forward,
backward, forward, backward, and backward, respectively.
Sample Output
OUTPUT DETAILS:
For K = 3, the machine must be operated three times: turn cows (1,2,3),
(3,4,5), and finally (5,6,7):
B > F F F
B > F F F
F > B > F F
B B > F F
F F > B > F
B B B > F
B B B > F
HINT
当K=3时神奇的机器旋转3次:(1,2,3),(3,4,5),和(5,6,7)