最後要求輸出奇數字數的和,記錄操作4的次數和n的奇偶即可表示出答案
用雙向鍊錶來表示關係
#include#include#includetypedef long long ll;
int righta[100005],lefta[100005];
void link(int l,int r) //l<--->r
using namespace std;
int main()
righta[0]=1;lefta[0] = n;//將0->1->2...->n->0這樣連起來
int op,x,y,inv = 0;//inv來標記鍊錶是否被操作4反轉過 根據inv來判斷op為1、2時的操作 和輸出時的順序
while(m--)
else if(op == 2)
else if(op == 3)
else }}
}int b = 0;
ll ans = 0;
for(int i= 1;i<=n;i++)
if(inv && n%2==0) ans = (ll)n*(n+1)/2-ans;
printf("case %d: %lld\n",++kase,ans);
}return 0;
}
uva12657 雙向鍊錶
題目大意 給你n個盒子,分別標號為1 n 有下面4種操作 1 x y 表示將x移到y的左邊 2 x y 表示將y移到y的右邊 3 x y 表示交換x與y的位置 4 表示將1 n所有的盒子反序。要你求經過m次操作之後,所有奇數字置的盒子標號之和。解題思路 大體的說一下 裡有詳細注釋 當n是奇數時,操作...
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來看,需要有乙...