PAT-B 1069 微博轉發抽獎【模擬+集合】

Enjoy_process發表於2019-02-26

                                          PAT-B 1069 微博轉發抽獎

                         https://pintia.cn/problem-sets/994805260223102976/problems/994805265159798784

 

 

題目

小明 PAT 考了滿分,高興之餘決定發起微博轉發抽獎活動,從轉發的網友中按順序每隔 N 個人就發出一個紅包。請你編寫程式幫助他確定中獎名單。

輸入

輸入第一行給出三個正整數 M(≤ 1000)、N 和 S,分別是轉發的總量、小明決定的中獎間隔、以及第一位中獎者的序號(編號從 1 開始)。隨後 M 行,順序給出轉發微博的網友的暱稱(不超過 20 個字元、不包含空格回車的非空字串)。注意:可能有人轉發多次,但不能中獎多次。所以如果處於當前中獎位置的網友已經中過獎,則跳過他順次取下一位。

輸出

按照輸入的順序輸出中獎名單,每個暱稱佔一行。如果沒有人中獎,則輸出 Keep going...

樣例輸入

9 3 2
Imgonnawin!
PickMe
PickMeMeMeee
LookHere
Imgonnawin!
TryAgainAgain
TryAgainAgain
Imgonnawin!
TryAgainAgain

樣例輸出

PickMe
Imgonnawin!
TryAgainAgain

分析

使用集合儲存已經獲獎的人的暱稱,具體細節看程式。

C++程式

#include<iostream>
#include<string>
#include<set>

using namespace std;

const int N=1005;

string str[N];
set<string>v;//記錄已經獲獎的人的暱稱 

int main()
{
	int m,n,s;
	cin>>m>>n>>s;
	for(int i=1;i<=m;i++)
	  cin>>str[i];
	bool flag=false;//記錄是否有人中獎
	for(int i=s;i<=m;)
	{
		if(v.count(str[i])==0)
		{
			cout<<str[i]<<endl;//輸出中獎的人的暱稱 
			v.insert(str[i]);//將中獎的人的暱稱放入集合中 
			flag=true;//標記有人中獎了 
			i+=n;//取下一個間隔為n的人 
		}
		else
		  i++;//此人已經獲獎了,取下一個人 
	}
	if(!flag) cout<<"Keep going..."<<endl;//沒人中獎
	return 0; 
}

 

相關文章