6 5 移動的盒子 uva12657

2022-05-01 18:03:08 字數 1017 閱讀 4088

較為複雜的一題;有點類似6-1  但是分析完之後比6-1簡單   就是按照思路模擬就好!

學會了雙向鍊錶   先初始化   link是關鍵

分析命令   可以大大簡化**  :

反轉鍊錶不用反轉  改操作和輸出就行;

#includeusing

namespace

std;

void link(int ,int

);int left1[100005],right1[100005

];int

main()

left1[

0]=n;right1[0]=1

;while(q--)

int x,y;cin>>x>>y;

if(q==3)

if(q!=3&&flag)q=3-q;

if(q==1)if(right1[x]==y)continue

;

if(q==2)if(right1[y]==x)continue

;

int xl=left1[x],xr=right1[x],yl=left1[y],yr=right1[y];

if(q==1

)

if(q==2

)

if(q==3

)

else

}} long

long sum=0

;

int b=0

;

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

if(flag&&n%2==0)sum=(long

long)n*(n+1)/2-sum;

printf(

"case %d: %lld\n

",cas++,sum);

}return0;

}void link(int l,int

r)

view code

注意細節!分析所有情況! 

此外  第三個命令時一定要注意是否相鄰!

uva12657 移動盒子

你有一行盒子,從左到右依次編號為1,2,3,n。可以執行以下4種指令 1 x y 表示把盒子x移動到盒子y的左邊 如果x已經在y的左邊則忽略此指令 2 x y 表示把盒子x移動到盒子y的右邊 如果x已經在y的右邊則忽略此指令 3 x y 表示交換盒子x和y的位置。4 表示反轉整條鏈。指令保證合法,即...

UVA 12657 移動盒子 最詳細講解

題目鏈結 有一行從左到右編號為 1,2 3,4 n 的盒子,定義以下四種指令 1 x y 將編號為x 的盒子移動到 y 的左邊 若x已在 y 的左邊,則忽略此指令 2 x y 將編號為 x 的盒子移動到 y 的右邊 若x 已在y的右邊,則忽略此指令 3 x y 交換 x 和 y 盒子的位置 4 將所...

Uva 12657 移動盒子(雙向鍊錶)

你有一行盒子,從左到右依次編號為1,2,3,n。可以執行以下4種指令 1 x y表示把盒子x移動到盒子y左邊 如果x已經在y的左邊則忽略此指令 2 x y表示把盒子x移動到盒子y右邊 如果x已經在y的右邊則忽略此指令 3 x y表示交換盒子x和y的位置。4 表示反轉整條鏈。指令保證合法,即x不等於y...