リンクをクリックして、完全なソリューションの概要PAT B -AC
タイトル:
暁明PAT試験アウト、私は前方のラッフルマイクロブロギング起動することを決め嬉しい、赤い封筒ごとに個別に送信するために、Nを転送してからユーザー。彼は受賞者のリストを決定するのに役立つプログラムを作成してください。
入力フォーマット:
最初の行の入力は、それぞれ3つの正の整数M(≤1000)、N、およびSを与え、総転送数暁間隔決定及び第一の勝者(1から始まる番号)を受賞。その後、M行、オーダー与えられたユーザーフォワードマイクロブログのニックネーム(なし以上20文字以内、文字列が非空のスペースにキャリッジリターンが含まれていません)。
注:一部の人々は何回も転送しますが、何度も受賞していないことがあります。あなたは、現在のユーザーの優勝立場にあるのであれば、彼は順次削除さ1をスキップし、何かを獲得しています。
出力フォーマットの
ために勝者の出力リストは、各ニックネームに、一列に入りました。何の勝者、出力がない場合Keep going...
。
サンプル入力1:
9 3 2
Imgonnawin!
PickMe
PickMeMeMeee
LookHere
Imgonnawin!
TryAgainAgain
TryAgainAgain
Imgonnawin!
TryAgainAgain
出力サンプル1:
PickMe
Imgonnawin!
TryAgainAgain
サンプル入力2:
2 3 5
Imgonnawin!
PickMe
出力サンプル2:
Keep going...
私のコード:
#include<iostream>
#include<cstdio>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstring>
#include<sstream>
using namespace std;
//有的时候题目是一起做的,所以会有不需要的头文件
int main()
{
int M,N,S;
int flag=9999;
set<string>finished;
cin>>M>>N>>S;
getchar();
for(int i=1;i<=M;i++)
{
string name;
getline(cin,name);
flag++;
if(i>=S&&flag>=N&&finished.find(name)==finished.end())
{
finished.insert(name);
cout<<name<<endl;
flag=0;
}
}
if(finished.size()==0)cout<<"Keep going..."<<endl;
return 0;
}
注:Nは小さいが、ケース大S。
注:このよう受賞など、間隔をカウントし、その後、最初は何の問題を理解することはありません、ない区間が決定した後、今度は大当たりの人が遅れて会っていますが、中に現在の勝利の人々は勝つ:3,6,9,12を、6が既に受け取っていたうちに送信されません:3,7,9,12、しかし、3,7,10,13