评测记录:https://www.luogu.com.cn/record/198472181
思路是先映射到楼道1,然后计算出最大的 p 满足 pk≤ai,答案计算分为两部分:1∼p 和 p+1∼ai,其中第一部分为若干循环节为 k 的循环,第二部分没有 k 的倍数。
Code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int n, k, x, y; cin >> n >> k >> x >> y;
int a = n / k; int b = n - a;
int sum = a * x + b * y; // 一个楼道的房间数
int r = x + (k - 1) * y; // 1 ~ k层的房间数
int q; cin >> q;
while (q --) {
int z; cin >> z;
z = (z - 1) % sum + 1; // 映射到楼道1
cout << z / r * k + (z - z / r * r + y - 1) / y << endl;
}
return 0;
}