#P1086. 排序 (transform)

排序 (transform)

題目描述

有一個由 𝑁 個數字組成的數列, 這數列是 1 至 𝑁 的某種排列。 這個數列經過 𝐾 輪操作後, 變成了一個由 1 至 𝑁 的順序排列。 而每輪操作都是相同的, 在每一輪操作都有 𝑃 個指令, 每個指令是將指定的位置上的數字對換。 我們想知道在未進行任何操作前, 最初的數列是什麼?

由於數列可能很長, 所以我們不需要輸出整個數列, 只需要輸出三個代表性的整數就可以, 它們分別為 𝐴, 𝐵, 𝑆。

  • 𝐴 是最初數列中的第一個數
  • 𝐵 是最初數列中的最後一個數
  • 𝑆 是最初數列中的測和, 其計算方法如下:設最初數列為 𝑑1, 𝑑2, 𝑑3, ... , 𝑑𝑁, 則其測和為
    𝑆 = ( 𝑑1 × 𝑁0 + 𝑑2 × 𝑁1 + 𝑑3 × 𝑁2 + ... + 𝑑𝑁 × 𝑁𝑁 − 1 ) mod 1000000007

其中, mod 1000000007 為取餘運算 (即除以1000000007 後取其餘數)。

輸入格式

輸入第一行有三個正整數, 分別為 𝑁 𝐾 𝑃 (其代表意義見上文內容)

隨後有 𝑃 行, 每行有兩個正整數 𝑎 及 𝑏, 代表要將位置在 𝑎 及 𝑏 上的兩個數字對調 (1 ≤ 𝑎, 𝑏 ≤ 𝑁)

輸出格式

輸出一行, 其上有 3 個數字 𝐴 𝐵 𝑆, 每個數字之間以一個空格分開。 這個數字為最初數列的代表性數字, 其定義見上面題目的描述。

Samples

4 3 3
1 4
2 4
1 3
3 2 199

提示

10 ≤ 𝑁 ≤ 100000, 𝑁 ≤ 𝐾 ≤ 2𝑁,𝑁/2≤ 𝑃 ≤ 2𝑁
對於30%的數據, 𝑁 ≤ 1000
對於70%的數據,𝑁 ≤ 10000

最初排列: 3 1 4 2 (這是最初的數列,因為它經過下面題目要求的操作後,會變為 1 至 4 的順序排列)
第一輪操作後: 4 3 2 1
第二輪操作後: 2 4 1 3
第三輪操作後: 1 2 3 4 (得到 1 至 4 的順序排列)

因此,輸出為數列的第一個數 (即 3), 最後一個數 (即 2),及它們的測和: (3 ×40 + 1 ×41 + 4 ×42 + 2 ×43 ) mod 1000000007 = 199

原始資料

  • Zero1 題號:b087
  • Hydro 題號:Z1087
  • Locale:zh_TW
  • Display:open