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