POJ 3078 - Q
http://poj.org/problem?id=3078
概要
m 個の要素を持つキューが与えられる. n 個の starting-position to requested-position という命令が与えられ,starting-position にある要素を requested-position に移動しろということを表す.
これら n 個の命令は同時に実行される.つまり, item1 item2 item3 というキューに対して
- 1 to 3
- 3 to 2
という命令がきたら,結果は item2 item3 item1 になる.
制約
- 1 <= m, n <= 20
- 各要素は8文字以下のアルファベットから成る
解法
命令通りにシミュレーション.
poj/3078.cc1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int main() 6 { 7 int T; 8 cin >> T; 9 while (T-- > 0) { 10 int M, N; 11 cin >> M >> N; 12 vector<int> before(M), after(M); 13 vector<string> v(M); 14 for (int i = 0; i < M; i++) { 15 cin >> v[i]; 16 before[i] = i; 17 after[i] = -1; 18 } 19 for (int i = 0; i < N; i++) { 20 int from, to; 21 cin >> from >> to; 22 --from; --to; 23 after[to] = from; 24 before[from] = -1; 25 } 26 for (int i = 0, j = 0; i < M; i++) { 27 if (after[i] == -1) { 28 for (; before[j] == -1; j++); 29 after[i] = j; 30 before[j] = -1; 31 } 32 } 33 for (int i = 0; i < M; i++) { 34 if (i != 0) { 35 cout << ' '; 36 } 37 cout << v[after[i]]; 38 } 39 cout << endl; 40 } 41 return 0; 42 }