题目大意
给定两个数列,每组操作可以把每个数向后移动\((N-D)\)位或向前移动任意位,问最少需要多少组操作。
原题:
假设一周有\(N\)天,一个人有\(N\)件衣服,每天穿一件,每周不重复,洗一件衣服需要\(D < N\)天之后才能穿,给定第一周和最后一周穿衣服的情况,问最少需要多少周才能实现。
(这题又叫:氢酱换袜子~)
解法
如果某一件衣服最后一周穿的时间在第一周穿的时间之后,那么这件衣服肯定是没有限制的。
也就是说,周\(x\)穿的衣服下一周最早在周\(x-(N-D)\)才能穿,发现了这一点之后,模拟即可。
Code
class ANewHope {
public:
int count(vector<int> firstWeek, vector<int> lastWeek, int D) {
int n = firstWeek.size();
int maxDelta = n - D, ans = 1;
for (int x = 0; x < n; x++)
for (int y = 0; y < x; y++)
if (firstWeek[x] == lastWeek[y])
ans = max(ans, (x - y + maxDelta - 1) / maxDelta + 1);
return ans;
}
};
Level Upper 2016 - TopCoder 250 : 5 / 5