2021大一寒假七(佇列)

2021-10-14 09:56:05 字數 4474 閱讀 1556

佇列的題挺簡單的,比較難的是佇列和結構體結合起來,主要是不知道怎麼結合,上網找也沒有找到有關的模板,還是要有**的幫助理解起來更簡單。
週末舞會-佇列

problem:a

time limit:1000ms

memory limit:65535k

description

假設在週末舞會上,男士們和女士們進入舞廳時,各自排成一隊。跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴。規定每個舞曲只能有一對跳舞者。若兩隊初始人數不相同,則較長的那一隊中未配對者等待下一輪舞曲。現要求寫乙個程式,模擬上述舞伴配對問題。

input

第 1 行兩個正整數,表示男士人數 m 和女士人數 n,1≤m,n≤1000;

第 2 行乙個正整數,表示舞曲的數目 k,k≤1000。

output

共 k 行,每行兩個數,之間用乙個空格隔開,表示配對舞伴的序號,男士在前,女士在後。

sample input

2 46

sample output

1 12 2

1 32 4

1 12 2

#include

using

namespace std;

queue<

int>vis1,vis2;

intmain()

return0;

}

取牌遊戲-佇列-set

problem:b

time limit:1000ms

memory limit:65535k

description

小明正在使用一堆共 k 張紙牌與 n-1 個朋友玩取牌遊戲。其中,n≤k≤100000,2≤n≤100,k 是 n 的倍數。紙牌中包含 m=k/n 張「good」牌和 k-m 張「bad」牌。小明負責發牌,他當然想自己獲得所有「good」牌。

他的朋友懷疑他會欺騙,所以他們給出以下一些限制,以防小明耍詐:

1)遊戲開始時,將最上面的牌發給小明右手邊的人。

2)每發完一張牌,他必須將接下來的 p 張牌(1≤p≤10)一張一張地依次移到最後,放在牌堆的底部。

3)以逆時針方向,連續給每位玩家發牌。

小明迫切想贏,請你幫助他算出所有「good」牌放置的位置,以便他得到所有「good」牌。牌從上往下依次標註為 #1,#2,#3,…

input

第 1 行,3 個用乙個空格間隔的正整數 n、k 和 p。

output

m 行,從頂部按公升序依次輸出「good」牌的位置。(就是從小到大輸出)

sample input

3 9 2

sample output37

8

#include

using

namespace std;

const

int n=

1e5+1;

queue<

int>vis;

int a[n]

;int

main()

}sort

(a,a+k/n)

;for

(int i=

0;i) cout<

}

報數-佇列-約瑟夫環

problem:c

time limit:1000ms

memory limit:65535k

description

n個小朋友們坐成乙個圓圈,編號分別為1,2,3…n;第1個小朋友從1開始報數,報到m的小朋友離開座位;然後下乙個小朋友從1接著報數;直到剩下最後乙個小朋友為止;

input

輸入2個數字n和m;(1<=n,m<=1000)

output

輸出最後乙個小朋友的編號!

sample input

10 5

sample output

3

#include

using

namespace std;

queue<

int>vis;

intmain()

} cout

}

酒桌遊戲-佇列

problem:d

time limit:1000ms

memory limit:65535k

description

n個人圍成乙個圓桌,按照順時針的順序1,2,…n進行編號;某乙個人開始報乙個數字,然後順時針的下乙個人會報數+1;當某個人報的數字含有7或是7的倍數時,這個人退出遊戲,其他人接著報數!直到剩下乙個人為止!

input

輸入n,m,t;n代表人數,m代表開始報數的人的編號;t表示開始報數的人報出的數字是t;

然後接下來有n行,是這n個人的名字!

output

輸出最後乙個人的名字!

sample input

5 3 20

liming

wangze

gongxiangjun

wangming

chenzhen

sample output

chenzhen

#include

using

namespace std;

struct sa

stu[

1001];

intjudge

(int x)

return1;

}queue<

struct sa>vis;

intmain()

for(

int i=

1;i<=n;i++

) vis.

push

(stu[i]);

for(

int i=

1;i<=m-

1;i++

)while

(vis.

size()

>1)

cout

.name

}//劃重點啊!!!這道題跟上一題很相似,有以下三點需要注意 。

//1、看清楚判斷的條件,7的倍數或者帶7,這需要單獨寫乙個判斷的函式。

//2、佇列就相當於把push()的東西排成乙個隊伍,對於結構體,先對結構體進行正常接收資料,然後再寫乙個迴圈push()結構體就可以。

//3、struct stu a,b;a=b;是可以的。

庫特的素數佇列(1)

problem:e

time limit:4000ms

memory limit:200000k

description

由於乙個和庫特很熟的幼兒園阿姨在某一天突然有急事,所以她拜託庫特幫她講一天的課,正好這天課程的內容是素數。由於大家還小,庫特希望能夠能以遊戲的方式來給他們講解。幼兒園共有n個孩子(n<=1e7),他們的序號分別是從1到n。庫特讓這n個孩子按照序號從小到大的順序從左到右站成一排,然後從左向右依次報數,從第乙個人開始,第乙個人開始報1,之後每個人報的數字比他左邊的人大1。最後報的數為素數的人能進入下一輪。然後進入下一輪的人再按序號從小到大的順序從左到右站成一排,然後從左向右依次報數,從第乙個人開始,第乙個人開始報1,之後每個人報的數字比他左邊的人大1,最後報的數為素數的人能進入下一輪…重複這個操作直至只剩下乙個孩子。庫特會給這個孩子獎勵,請問你能知道序號為幾的孩子能得到庫特的獎勵嗎?

input

第一行乙個正整數t表示資料組數(t<=3)

接下來t行每行乙個正整數n表示孩子的數量(n<=1e7)

output

對於每組資料,輸出一行,輸出最後得到獎勵的孩子的序號

sample input22

6sample output25

hint

解釋一下n=6的情況

首先站成一排 1 2 3 4 5 6

第一輪過後還剩下 2 3 5

然後序號為2的人報1,序號為3的人報2,序號為5的人報3

所以第二輪過後還剩下 3 5

序號為3的人報1,序號為5的人報2

所以第三輪過後還剩下 5乙個人

遊戲結束

#include

const

int n=

1e7;

using

namespace std;

int b[n+1]

;int prime[n+1]

;int ans=0;

bool

init()

}}//這道題就是和素數篩結合了一下,套模板是可以的,不會超時或者是超記憶體。

queue <

int> vis;

intmain()

} cout

pop();

//清空佇列

}return0;

}

大一寒假集訓(8) 佇列

佇列的定義 佇列就是允許在一端進行插入,在另一端進行刪 除的線性表。允許插入的一端稱為隊尾,通常用乙個 隊尾指標r指向隊尾元素,即r總是指向最後被插入的 元素 允許刪除的一端稱為隊首,通常也用乙個隊首 指標f指向排頭元素的前面。初始時f r 0 佇列的基本操作 1 初始化佇列 queue int v...

大一寒假訓練(七)

借鑑二位博主 抱拳 nefu ljw link.nefu wmjlink.problem a 週末舞會 佇列 link.include using namespace std queue int vis1,vis2 intmain return0 problem b 取牌遊戲 佇列 set link...

2020大一寒假ACM培訓 (優先佇列篇)

優先佇列是一種具有受限訪問操作的儲存結構,元素可以以任意順序進入優先佇列,一旦元素在優先佇列容器中,出隊操作將出佇列中優先順序最高的元素。可以理解為元素進入優先佇列自動排序 構建 priority queue int,vector int greater int s 公升序排列 priority q...