sicily 1934. 移動小球

  題目地址:http://soj.me/1934

  這道題我覺得挺精妙的,如果用數組順序儲存的話,很不好做,但是用數組模擬雙向鏈表的話,或者直接用雙向鏈表的話,就很簡單了。真心覺得這題不錯。

#include <iostream>
using namespace std;
int prev[500005];
int next[500005];
int main() {
  int N;
  cin >> N;
  while (N--) {
    int number_num, op_num;
    cin >> number_num >> op_num;
    for (int i = 1; i <= number_num; i++) {
      prev[i] = i-1;
      next[i] = i+1;
    }
    while (op_num--) {
      int flag, a, b;
      cin >> flag >> a >> b;
      if (flag == 1) {
        next[prev[a]] = next[a];
        prev[next[a]] = prev[a];
        next[prev[b]] = a;
        prev[a] = prev[b];
        next[a] = b;
        prev[b] = a;
      } else if (flag == 2) {
        next[prev[a]] = next[a];
        prev[next[a]] = prev[a];
        prev[a] = b;
        next[a] = next[b];
        prev[next[b]] = a;
        next[b] = a;
      }
    }
    int count = 0;
    int number = next[0];
    while (count < number_num) {
      cout << number << ' ';
      number = next[number];
      count++;
    }
    cout << endl;
  }
  //system("pause");
  return 0;
}
      


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章