nn 個長度為 mm 的陣列 ci,jc_{i,j},初始內容相同,同時選定一個特殊陣列 ckc_k

對於陣列 ctc_t 有以下兩個操作(i<ji < j 且操作不越界):

  1. 選定 iijj,然後 ct,ict,i1c_{t,i} \gets c_{t,i} - 1ct,jct,j1c_{t,j} \gets c_{t,j} - 1ct,i1ct,i1+1c_{t,i-1} \gets c_{t,i-1} + 1ct,j+1ct,j+1+1c_{t,j+1} \gets c_{t,j+1} + 1;
  2. 選定 iijj,然後 ct,ict,i1c_{t,i} \gets c_{t,i} - 1ct,jct,j1c_{t,j} \gets c_{t,j} - 1ct,i1ct,i1+1c_{t,i-1} \gets c_{t,i-1} + 1ct,j+2ct,j+2+1c_{t,j+2} \gets c_{t,j+\mathbf{2}} + 1;

操作 1 只能在非特殊陣列上使用,操作 2 只能在特殊陣列上使用,每個陣列至少有一次操作。

給定操作後的 nn 個數組,求特殊陣列的編號及其被操作次數。

考慮將陣列 cic_i 看成差分陣列,令其字首和為 sis_i, 操作 1,2 就變成了區間操作,發現操作 2 的減法操作的區間明顯要大一些,由此發現每次操作 2,s\sum s 便減 11

void solve()
{
    int n, m;
    std::cin >> n >> m;
    std::vector<std::vector<long long>> c(n, std::vector<long long>(m));
    std::vector<long long> ss(n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            std::cin >> c[i][j];
        }
        std::partial_sum(c[i].begin(), c[i].end(), c[i].begin());
        ss[i] = std::accumulate(s[i].begin(), s[i].end(), 0ll);
    }
    int key = std::min_element(ss.begin(), ss.end()) - ss.begin();
    std::cout << key + 1 << " " << ss[(key + 1) % n] - ss[key] << std::endl;
}