Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- int solve1(int screenHeight, int mouseHeight, int scrollStep, int tableHeight, int linesCount, const std::vector<int> & linePos) {
- std::vector<int> count(screenHeight), countMod(scrollStep);
- // First screen
- int left = 0, right = linesCount-1;
- while (left < linesCount && linePos[left] < screenHeight) {
- for (int i = linePos[left]; i >= 0; i -= scrollStep) {
- ++count[i];
- }
- ++left;
- }
- // Last Screen
- // U-1 + k*T == L-1 --> k = [(L-U) / T]+1;
- int k = (int)ceil((tableHeight-screenHeight) * 1.0 / scrollStep);
- while (right > left && linePos[right] >= k*scrollStep) {
- for (int i = linePos[right]-k*scrollStep; i < screenHeight; i += scrollStep) {
- ++count[i];
- }
- --right;
- }
- // Mid screen
- for (int line_id = left; line_id <= right; ++line_id) {
- ++countMod[linePos[line_id] % scrollStep];
- }
- // Find best pos
- int min_sum = (int) 1e9;
- for (int startPos = 0; startPos+mouseHeight-1 < screenHeight; ++startPos) {
- int sum = 0;
- for (int i = startPos; i <= startPos+mouseHeight-1; ++i) {
- sum += count[i]+countMod[i % scrollStep];
- }
- min_sum = std::min(sum, min_sum);
- }
- return min_sum;
- }
- int main() {
- freopen("input.txt", "rt", stdin);
- int screenHeight, mouseHeight, scrollStep, tableHeight;
- scanf("%d %d %d %d", &screenHeight, &mouseHeight, &scrollStep, &tableHeight);
- int countLines;
- scanf("%d", &countLines);
- std::vector<int> linePos(countLines);
- for (auto & x : linePos)
- scanf("%d", &x);
- printf("%d", solve1(screenHeight, mouseHeight, scrollStep, tableHeight,countLines,linePos));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement