牛客網答題筆記 構造佇列

2021-07-22 04:32:59 字數 2478 閱讀 1110

小明同學把1到n這n個數字按照一定的順序放入了乙個佇列q中。現在他對佇列q執行了如下程式:

while(!q.empty())              //佇列不空,執行迴圈

做取出隊頭的值操作的時候,並不彈出當前隊頭。

小明同學發現,這段程式恰好按順序輸出了1,2,3,…,n。現在小明想讓你構造出原始的佇列,你能做到嗎?

輸入描述:

第一行乙個整數t(t ≤ 100)表示資料組數,每組資料輸入乙個數n(1 ≤ n ≤ 100000),輸入的所有n之和不超過200000。
輸出描述:

對於每組資料,輸出一行,表示原始的佇列。數字之間用乙個空格隔開,不要在行末輸出多餘的空格.
輸入例子:

412

310

輸出例子:

1

2 12 1 3

8 1 6 2 10 3 7 4 9 5

出隊的順序是1 -> 2 -> 3 -> 4 -> 5 -> 6 ,1是第乙個出隊的。

題中的操作是:

先取出原佇列隊頭元素 x = q.front()

刪除隊頭,這個隊頭已經被保留到x中了

將先前保留的隊頭放到隊尾部

printf新的隊頭,並且將這個隊頭刪除,也就相當於kill這個隊頭

我們看這個整個一次過程,就相當於從第乙個元素開始,數到第二個元素,把這個第二個元素kill(移除佇列)。之後再從這個被kill的元素的下乙個元素(這時候已經成了新的隊頭),又開始數,到第二個又刪除……..

那麼就出來了:這是乙個環內有6個數的約瑟夫環,q = 2的出環問題。

我們要求的,就是原先的佇列的各個位置的值,也相當於每一步出隊返回的下標,將其的值按照這個下標排列:

我們知道這時候的出隊順序是: 1  2  3  4  5  6

| | | | | |

而約瑟夫環中出隊的順序是: 2 4 6 3 1 5

如上的一一對應關係是:值1在原佇列的2號位置,值2在原佇列的4號位置,值3在原佇列的6號位置.....

得出的結果就是:5 1 4 2 6 3

而題目中給出的答案也是這樣。

所以我們得出一種比較簡單的解題思路:

ac**:

#include

#include

#include

using

namespace

std;

int main(void)

while(!temp.empty())

vector

r(n+1);

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

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

if(i != n)

cout

<" ";

else

cout

0;}

#include 

#include

using

namespace

std;

int main()

for(int i = 0; i < q.size(); i++)

cout

<< q[i] << " ";

cout

<< endl;

}}

這個是將出隊順序的數反過來執行一遍和出隊相反的操作,相當於入隊操作。

1.int x = temp.front();                  3.q.push_front(t);      

temp.pop();

temp.push(x);

q.pop_back();

2.res.push_back(temp.front()); 2.int t = q.back();

3.temp.pop(); 1.q.push_front(i);

我來翻譯一下:

1.取出頭                    3.將取出的尾放到頭部  

刪掉頭

2.把取出的頭放到尾部 2.找到尾(被放到尾部的頭),刪掉尾

3.刪掉新的頭 1.壓入頭

那麼這個過程就能看得懂了,這就是構造乙個特殊的入隊規則,相當於一種特殊的佇列,和出隊相反的規則。

牛客網答題筆記 構造回文

給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。輸入例子 abcda goo...

牛客網答題筆記 字元移位

小q最近遇到了乙個難題 把乙個字串的大寫字母放到字串的後面,各個字元的相對位置不變,且不能申請額外的空間。你能幫幫小q嗎?輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出移位後的字串。輸入例子 aklebiceild輸出例子 klei...

牛客網答題筆記 有趣的數字

小q今天在上廁所時想到了這個問題 有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢?輸入描述 輸入包含多組測試資料。對於每組測試資料 n 本組測試資料有n個數 a1,a2.an 需要計算的資料 保證 1 n 100000,0 ai int max.輸出描述 對於每組資料,輸出兩個數,第乙個數表...