csu 1329 一行盒子

2021-07-12 00:04:36 字數 1796 閱讀 9676

一行盒子

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的左邊則忽略此...