項鍊 牛客小白月賽29

2021-10-25 09:38:05 字數 2157 閱讀 1506

scimoon 意外得到了乙個項鍊,這個項鍊非常的神奇:它有 n 個珠子,一開始每個珠子有乙個編號, 從左到右編號分別是 1 至

n,scimoon 進行了 m 次操作,每次操作有下面這麼幾種:

1 x y :表示將編號為 x 的珠子移到編號為 y 的珠子的後面

2 x y :表示將編號為 x 的珠子移到編號為 y 的珠子的前面

3 :表示翻轉這個項鍊,注意翻轉後 1,2 操作中的前後關係會改變

4 :從編號 1 的珠子開始從左到右輸出每個珠子的編號

如果您沒有完全理解題意,您可以通過閱讀樣例解釋幫助理解

第一行兩個數: n 和 m

第 2∼m+1 行:輸入每一次操作

對於每次操作 4,輸出這個項鍊每位置上的珠子的編號。

示例1

輸入

5 6

1 2 4

42 5 343

4

輸出
1 3 4 2 5

1 5 3 4 2

1 2 4 3 5

說明
第一次操作後,2 號珠子被放到了 4 號珠子的後面,項鍊為 [1,3,4,2,5]

第二次操作輸出當前的項鍊 [1,3,4,2,5]

第三次操作後,5 號珠子被放到了 3 號珠子的前面,項鍊為 [1,5,3,4,2]

第四次操作輸出當前的項鍊 [1,5,3,4,2]

第五次操作翻轉當前項鍊 [2,4,3,5,1]

第六次操作中,由於我們需要從 1 開始輸出項鍊,因此輸出 [1,2,4,3,5]

備註:
1≤n≤10000,1≤m≤100000

用陣列模擬雙向鍊錶,最後只過了96%的資料,先把**存放在這。

隨後寫出來後再更新。 (已更新)

#include

using

namespace std;

int n,m,op,x,y,a[

10005

],b[

10005

],c[

10005];

void

print_op()

}void

test()

cout

int i=

1;i<=n;i++

) cout<"........"

<}void

operation

(int op)

}else

if(op ==2)

}else

if(op ==3)

}else

if(op ==4)

//test();

}int

main()

//test();

while

(m--

)}

過100%資料的**
#include

using

namespace std;

int n,m,op,x,y,a[

10005

],to[

10005

],from[

10005

],flag=0;

void

print_op()

}else}}

voidf0(

)voidf1(

)void

test()

cout

int i=

1;i<=n;i++

) cout<"........"

<}void

operation

(int op)

else

}else

if(op ==2)

else

}else

if(op ==3)

else

if(op ==4)

//test();

}int

main()

//test();

while

(m--

)}

牛客小白月賽29(簽到 A E G H)

貪心,由於基地可以重複銷毀,所以找出找出每架戰機可轟炸基地的最大價值,排序之後貪心找一下即可 include include using namespace std const int n 1e6 15 struct nodeno n bool cmp node a,node b int a n i...

牛客小白月賽29 A 進攻

題目位址 一 題目內容 二 解題思路 scimoon 率領的反叛軍已經做好了準備 他的手下有 n 個戰機,每架戰機有乙個破壞力 ai 帝國有 m 個基地,每個基地有乙個防禦值 di,基地有乙個價值 vi 若乙個戰機的攻擊力嚴格大於基地的防禦值,則可以破壞該基地,得到這個基地的價值 v 帝國的後備資源...

牛客 2020 11 14牛客小白月賽29 B

by 041 本人原文 簡單的說,對於乙個bool量x x 1 x x 0 0 x 1 1 x 0 x x 1 x x 0 x 所以,對於每一次操作,在有影響 上面的2 3 5三種情況 到的位置加入相應操作的標記最後整合就行 對於第i位 0的操作 清空之前該位置所有的操作,加上標記1 對於第i位 1...