HDU 5163 - Taking Bus (模拟)
题意
问每个人到目的地要多少时间
思路
直接模拟
代码
LL sum[MAXN];
int main()
{
//ROP;
ios::sync_with_stdio(0);
int T, i, j;
cin >> T;
while (T--)
{
int n, m;
cin >> m >> n;
for (i = 2; i <= m; i++)
{
cin >> sum[i];
sum[i] += sum[i - 1];
}
for (i = 1; i <= n; i++)
{
int pos, target;
LL ans = 0;
cin >> pos >> target;
int carPos = ((i-1) % m) + 1;
//先计算车到来的时间
if (carPos > pos) //说明车要开个来回
{
ans += (sum[m]<<1) - sum[carPos] - sum[pos];
if (target <= pos) ans += abs(sum[target] - sum[pos]);
else ans += abs((sum[pos]<<1) + sum[target] - sum[pos]);
}
else
{
ans += sum[pos] - sum[carPos];
if (target >= pos) ans += sum[target] - sum[pos];
else ans += ((sum[m] - sum[pos])<<1) + abs(sum[target] - sum[pos]);
}
cout << ans << endl;
}
}
return 0;
}