uva12657 雙向鍊錶

2021-10-02 23:39:22 字數 963 閱讀 2516

題目大意:

給你n個盒子,分別標號為1~n;有下面4種操作:

「1 x y」 表示將x移到y的左邊;

「2 x y」 表示將y移到y的右邊;

「3 x y」 表示交換x與y的位置;

「4」 表示將1~n所有的盒子反序。

要你求經過m次操作之後,所有奇數字置的盒子標號之和。

解題思路

大體的說一下 **裡有詳細注釋

當n是奇數時,操作4逆序不會影響奇數字置盒子標號之和

當n是偶數時,操作4逆序就會影響 最終結果是所有位置標號之和-奇數字置標號之和

一開始對那個swap(x,y)一直不理解

然後慢慢捋一捋 3 x,y 是交換 x,y的位置 如果當時位置是 y,x的話 就把x,y的序號互換,這樣就是把 操作轉化為交換 y,x的位置 如果本來就是 x,y的話 就是交換xy的位置

**如下

#includeusing namespace std;

const int maxn=1e5+10;

int l[maxn],r[maxn];

void link(int a,int b)//讓a,b挨著

int main()

r[0]=1;

l[0]=n;

while(m--)

else if(k==2)//x移到y右邊

else

else//不相鄰的話 }}

} long long ans=0,num=0;

int kk=0;

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

if(n%2==0&&flag==1)

ans=num-ans;

cas++;

cout<<"case "

}

Uva 12657 (雙向鍊錶

最後要求輸出奇數字數的和,記錄操作4的次數和n的奇偶即可表示出答案 用雙向鍊錶來表示關係 include include includetypedef long long ll int righta 100005 lefta 100005 void link int l,int r l r usin...

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...

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 表示反轉整條鏈。從操作1,2來看,需要有乙...