東北林業大學acm大一培訓(六)(佇列)

2021-10-07 15:06:43 字數 4240 閱讀 5474

佇列就是允許在一端進行插入,在另一端進行刪除的線性表。允許插入的一端稱為隊尾,通常用乙個隊尾指標r, r指向隊尾元素,即r r總是指向最後被插入的元素;允許刪除的一端稱為隊首,通常也用乙個隊首指標f, f指向排頭元素的前面。初始時 f=r=0

(1)初始化佇列 queuevis ,定義乙個佇列

(2)入隊 vis.push(x)

(3)出隊 vis.pop()

(4)判斷佇列是否為空 vis.empty()

(5)判斷佇列中元素的數量vis.size()

(6)得到佇列的隊首元素 vis.front()

綜上: #include

用則無需考慮標頭檔案。

小k是乙個海港的海關工作人員,每天都有許多船隻到達海港,船上通常有很多來自不同國家的乘客。

小k對這些到達海港的船隻非常感興趣,他按照時間記錄下了到達海港的每一艘船隻情況;對於第i艘到達的船,他記錄了這艘船到達的時間ti (單位:秒),船上的乘客數k,以及每名乘客的國籍x1,x2,x3,x4等;

小k 統計了這n 艘船的資訊,希望你幫助計算出每1艘船到達為止的24小時(86400秒)內到達的船上的乘客來自多少個國家?

input

第1行為乙個n,表示有n條船;

接下來有n行,每行前2個數為t和k,表示這艘船的到達時間和船上的旅客數量!

然後是這k個旅客的國籍(x1 x2 x3 …都是整數)

output

輸出n行,每行代表這艘船到達為止的24小時(86400秒)內到達的船上的乘客來自多少個國家?

t[i]-t[p]<86400,t[i]表示當前船的時間,t[p]表示之前進海港的船!

1<=n,k<=300000; 1<=ti<=1000000000;

sample input

例子輸入1:

31 4 4 1 2 2

2 2 2 3

10 1 3

例子輸入2:

41 4 1 2 2 3

3 2 2 3

86401 2 3 4

86402 1 5

sample output

例子輸出1:34

4例子輸出2:33

34hint

#include

#include

using

namespace std;

const

int n=

1e5+1;

struct node

;int n,m,i,t,w,j,x;

int a[n]

;queuevis;

intmain()

);if(a[x]==0

) w++

; a[x]++;

}while

(t-vis.

front()

.t>=

86400

)printf

("%d\n"

,w);

}return0;

}

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

#include

using

namespace std;

struct node

p[1001];

bool

fun(

int x)

return0;

}queuevis;

intmain()

for(i=

1;i<=n;i++

)for

(i=1

;i<=m-

1;i++

)while

(vis.

size()

>1)

printf

("%s\n"

,vis.

front()

.name.

c_str()

);return0;

}

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

#include

using

namespace std;

queue<

int>vis;

intmain()

num=0;

while

(vis.

size()

>1)

printf

("%d"

,vis.

front()

);return0;

}

小明正在使用一堆共 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

#include

using

namespace std;

const

int n=

1e5+1;

queue<

int>vis;

intmain()

if(!vis.

empty()

)}}sort

(a,a+k/n)

;for

(i=0

;i)return0;

}

close

copyri

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

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

#include

using

namespace std;

queue<

int>vis1,vis2;

intmain()

return0;

}close

東北林業大學acm大一培訓(素數篩)

1.不知名篩選 篩法的思想是去除要求範圍內所有的合數,剩下的就是素數 了,而任何合數都可以表示為素數的乘積,因此如果已知一 個數為素數,則它的倍數都為合數。2.埃氏篩 合數的倍數一定會在篩素數倍數時候被篩掉,所以只篩素數就好,只把質數的素 數篩掉 就是找到乙個質數,把它的倍數全部標記為合數。但是你會...

東北林業大學OJ題目1

百步穿楊 problem 796 time limit 1000ms memory limit 65536k description 時維九月,序屬三秋,遼軍大舉進攻帽兒山,戰場上兩軍正交鋒.遼軍統帥是名噪一時的耶律洪豬,而帽兒山方則是派出了傳統武將 松樹葉子。雙方經過協商,約定在十一月八日正午十分...

東北林業大學oj1025 又是指標

現在有的程式根本用不上指標 但由於學c 不得不用指標這個讓我苦笑不得的東西 這道題 就是乙個例子 本來 簡簡單單的字串查詢 變成指標 o my god!題就是下面的 程式完成在一些已知字串中查詢含有 最多的字串的功能。要求用返回指標值的函式完成 找到這個字串,函式返回 最多的字串的首位址,若所有字串...