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;
}

Powered by Jekyll and Theme by solid