Sicily1934 移動小球

2021-07-11 23:38:22 字數 1385 閱讀 5639

時間限制: 1 秒, 記憶體限制: 32 兆

你有一些小球,從左到右依次編號為1,2,3,...,n. 你可以執行兩種指令(1或者2)。其中, 1 x y表示把小球x移動到小球y的左邊, 2 x y表示把小球x移動到小球y右邊。 指令保證合法,即x不等於y。 例如,初始狀態1,2,3,4,5,6的小球執行1 1 4後,小球1被移動到小球4的左邊,即2,3,1,4,5,6。如果再執行2 3 5,結點3將會移到5的右邊,即2,1,4,5,3,6。 

第一行為乙個整數t(0為每個測試用例單獨輸出一行,從左到右輸出最後序列,每個數字後面跟乙個空格。 

2 

6 2

1 1 4

2 3 5

5 1

2 1 5

2 1 4 5 3 6  

2 3 4 5 1

感覺自己能把這題做出來好感人啊!!!

今天才知道原來可以用多重陣列表示雙向鍊錶,而且蠻好理解的。

比如這題,申請兩個陣列l,r。然後陣列的下表其實就是那個數,l【x】就表示x左邊相鄰的數,r【x】就表示x右邊相鄰的數。然後考慮,每一次操作,那些數的左右兩邊的值會改變就行了。

當然我開始寫了乙個list版,結果可想而知,超時。。。

#include #include using namespace std;

void ope(list&num,int op,int x,int y) }

for(i = num.begin(); i != num.end(); i++) }

}int main()

list::iterator k;

for(k = num.begin(); k != num.end(); k++)

cout << endl;

} return 0;

}

然後是多重陣列模擬雙向鍊錶版:

#include #include #include #include #include #include #include #include #include using namespace std;

int l[500001],r[500001] = ;

void solve(int op,int x,int y)

else if(op == 2) }

void print(int n)

cout << endl;

}int main()

int op,x,y;

for(int i = 0; i < m; i++)

print(n);

} return 0;

}

加油加油!

Sicily課程作業 1934 移動小球

description 你有一些小球,從左到右依次編號為1,2,3,n.你可以執行兩種指令 1或者2 其中,1 x y表示把小球x移動到小球y的左邊,2 x y表示把小球x移動到小球y右邊。指令保證合法,即x不等於y。例如,初始狀態1,2,3,4,5,6的小球執行1 1 4後,小球1被移動到小球4的...

1934 移動小球

time limit 1 secs,memory limit 32 mb 你有一些小球,從左到右依次編號為1,2,3,n.你可以執行兩種指令 1或者2 其中,1 x y表示把小球x移動到小球y的左邊,2 x y表示把小球x移動到小球y右邊。指令保證合法,即x不等於y。例如,初始狀態1,2,3,4,5...

winform小球移動

private point location private void button1 click object sender,eventargs e private int v1 40 private int v2 40 private void timer1 tick object sender...