B 一行盒子

2022-04-17 11:00:39 字數 1714 閱讀 6065

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 4

1 1 4

2 3 5

3 1 6

46 3

1 1 4

2 3 5

3 1 6

100000 1

4

sample output

case 1: 12

case 2: 9

case 3: 2500050000

難點在於第四種操作,第四種操作是反轉,效果是前後繼交換了,其實根本不需要操作,只需記錄反轉的 次數就行了。反轉次數為奇數時,flag=1的操作變成flag=2的操作,flag=2的操作變成flag=1的操作,其他的不變。

因為反轉後,乙個數的前面變成後面,後面變成前面。還有就是構成環,方便找到起點和終點。

1 #include"

stdio.h

"2 #include"

string.h"3

const

int ms=100004;4

int left[100004];5

int right[100004];6

int *tmp1,*tmp2;

7 inline void link(int a,intb)8

12int

main()

1322 right[n]=0;//

構成環,方便尋找開始節點和結束節點

23 cnt=0;24

while(m--)

2542

else

4348}49

else

if(flag==2&&right[y]!=x)

5058

else

5964}65

else

if(flag==3)66

74else

if(right[y]==x)

7581

else88}

89}90long

long ans=0;91

if(cnt&1)92

96else

97101

for(i=1;i<=n;i++)

102111

}112

}113

return0;

114 }

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

csu 1329 一行盒子

一行盒子 crawling failed submit status practice csu 1329 description 你有一行盒子,從左到右依次編號為1,2,3,n 你可以執行四種指令 1 x y表示把盒子 x移動到盒子 y左邊 如果 x已經在 y的左邊則忽略此指令 2 x y表示把盒子...

做一行愛一行

2013年9 月30日13 04 34 地點 公司 筆者 小菜 it界高手很多,謙虛進步自己 目前適合 android iphone 在除錯階段 內容 今天是九月的最後一天了,也沒有太多的心思的編寫 了,看看這個月的工作效率,確實不是很高。最近也在看一本書,可能很多的博友都知道這本書的 程式設計師你...