一行盒子
crawling failed
submit
status
practice
csu 1329
description
你有一行盒子,從左到右依次編號為1, 2, 3,…, n
。你可以執行四種指令:
1 x y表示把盒子
x移動到盒子
y左邊(如果
x已經在
y的左邊則忽略此指令)。
2 x y表示把盒子
x移動到盒子
y右邊(如果
x已經在
y的右邊則忽略此指令)。
3 x y表示交換盒子x和
y的位置。
4 表示反轉整條鏈。
指令保證合法,即x
不等於y
。例如,當
n=6時在初始狀態下執行
1 1 4
後,盒子序列為
2 3 1 4 5 6
。接下來執行
2 3 5
,盒子序列變成
2 1 4 5 3 6
。再執行
3 1 6
,得到2 6 4 5 3 1
。最終執行
4,得到
1 3 5 4 6 2
。input
輸入包含不超過
10組資料,每組資料第一行為盒子個數
n和指令條數m(
1<=n,m<=100,000
),以下
m行每行包含一條指令。
output
每組資料輸出一行,即所有奇數字置的盒子編號之和。位置從左到右編號為
1~n。
sample input
6 41 1 4
2 3 5
3 1 6 4
6 31 1 4
2 3 5
3 1 6
100000 1 4
sample output
case 1: 12
case 2: 9
case 3: 2500050000
3、當要調位置的時候改變指標即可
注意: 4、
操作的時候可能有 (x和y為運算元,其他為相鄰的數):
xa b y x a y x y y a b y y a x y x 6種情況 5、
在翻轉的狀態時候 注意原本調到後面的要放到前面...前面的放到後面 6、
翻轉兩次就沒有翻轉狀態 7、
注意先取出來 ,再放進去 防止 x 和 y 相鄰的情況錯誤
#include#include#include#include#include#includeusing namespace std;
int n,m;
struct node
a[100100];
int line(int ,int );
int solve(int);
int ini();
int main()
scanf("%d %d",&x,&y);
if(mi==2&&f==0||mi==1&&f==1)//注意翻轉狀態
else if(mi==1&&f==0||mi==2&&f==1)
else if(mi==3)
else if(a[x].l==y)
else}}
solve(f);
}return 0;
}int ini()
int solve(int f)
p=a[p].r;//一直向右
}cout<
CSU 1329 一行盒子(模擬鍊錶)
description 你有一行盒子,從左到右依次編號為1,2,3,n。你可以執行四種指令 1 x y表示把盒子x移動到盒子y左邊 如果x已經在y的左邊則忽略此指令 2 x y表示把盒子x移動到盒子y右邊 如果x已經在y的右邊則忽略此指令 3 x y表示交換盒子x和y的位置。4 表示反轉整條鏈。指令...
csu 1329 一行盒子(雙向鍊錶模擬)
靜態模擬雙向鍊錶,只要寫的仔細一點就沒有難度,自己就是因為不仔細寫了很長時間。注意 1.修改兩個元素時不但要考慮這兩個元素本身,還要考慮他們的前驅和後繼結點的變化。2.交換操作注意兩個相鄰元素交換是特殊情況。3.反轉整個表不需要每次都轉,記錄下轉了多少次 偶數次等於沒轉 當前如果被反轉了那麼1操作就...
1662 一行盒子
time limit 1 sec memory limit 128 mb submit 10 solved 6 submit status web board 你有一行盒子,從左到右依次編號為1,2,3,n。你可以執行四種指令 l 1 x y表示把盒子x移動到盒子y左邊 如果x已經在y的左邊則忽略此...