題目傳送門:
跳舞鏈是帶哨兵節點的雙向迴圈鍊錶,更加優美的形式是將該鍊錶用靜態鍊錶的形式實現,使得查詢,刪除和恢復操作的時間複雜度均為o(1)
#include
#include
using
namespace
std;
const
int max = 10010;
int data[max], left[max], right[max];
int t,n,m;
//初始化,下標為0的結點為哨兵結點
void init()
data[0] = 0; right[0] = 1; left[0] = n;
data[n] = n; right[n] = 0; left[n] = n - 1;
return ;
}void moveb(int a, int b, int tag)
else
// 「跳舞」,跳舞鏈因此得名
left[right[a]] = a;
right[left[a]] = a;
return ;
}inline
int query(int a, int tag)
else
}int main()
if (c == 'b')
if (c == 'q') }}
return
0;}
NYOJ 511 移動小球
這道題很容易想到要構建乙個迴圈鍊錶來確定每個球的相對位置,就是操作比較繁瑣,考慮情況較多。首先要建立節點node,每個節點都有乙個初始順序order,指向左邊的node 指標left,何指向右邊的node 指標right。cpp view plain copy print?struct node n...
ny511 移動小球
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述給你n個小球,從左到右編號依次為1,2,3,4,5,6.n,並規定小球1的左邊的球號為n,小球n的右邊的球號為1.現在有以下3種操作 a x y表示把編號為x小球移動到編號為y的小球的左邊,b x y表示把編號為x小球移動到編號為...
NYOJ 511 移動小球 模擬
解題思路 先預處理一下左右陣列,使他們滿足初始時候的左右鄰居。然後模擬移動即可。這裡需要注意的就是移動時改變左右鄰居時,要防止覆蓋問題。就是我更改某個鄰居後,不能在以後的修改中影響這個值,所以順序需要注意。在這裡錯了,找了半個小時。悲劇。如下 include include include incl...