較為複雜的一題;有點類似6-1 但是分析完之後比6-1簡單 就是按照思路模擬就好!
學會了雙向鍊錶 先初始化 link是關鍵
分析命令 可以大大簡化** :
反轉鍊錶不用反轉 改操作和輸出就行;
#includeusingview codenamespace
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)
注意細節!分析所有情況!
此外 第三個命令時一定要注意是否相鄰!
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...