[ABC319E] Bus Stops 数论
作者:
多米尼克領主的致意
,
2024-05-21 19:28:52
,
所有人可见
,
阅读 4
题中P的范围为1-8 根据题意容易得出 每次从起点到终点的路程顺序不变
唯一改变的是在每个站等待的时间 那么只需要求出lcm(1~8) = 840 每840个数字出现一次循环
那么只要预处理这840次 询问中比840大的只需要取模即可
tip:
pre处理的时候要把i减去 len中有i是计算过程
而当pre具有一般性的时候不包含i这个起始时间
code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
ll n, x, y;
ll p[N], t[N], pre[840];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> x >> y;
for(int i = 1;i <= n - 1;i++){
cin >> p[i] >> t[i];
}
for(int i = 0;i <= 839;i++){
ll len = i + x;
for(int j = 1;j <= n - 1;j++){
if(len % p[j] || len < p[j])
len = (len / p[j]) * p[j] + p[j];
len += t[j];
}
len += y;
pre[i] = len - i;
// cout << pre[i] << endl;
}
int q;
cin >> q;
while(q--){
// cout << 1 << endl;
ll t;
cin >> t;
cout << (ll)t + pre[t % 840] << endl;
}
return 0;
}