AOJ 0221 - FizzBuzz

m>=2なので1人でやることはないんだとそっと胸をなでおろした.

#include<iostream>
#include<vector>
#include<sstream>

int toInt(std::string s){
	std::stringstream ss(s);
	int i;
	ss >> i;
	return i;
}

bool isTrue(int n, std::string s){
	std::string _s;
	if(n % 3 == 0)_s += "Fizz";
	if(n % 5 == 0)_s += "Buzz";
	if(n % 3 == 0 || n % 5 == 0){
		return s == _s;
	}
	return n == toInt(s);
}

int main(){
	int m, n;
	while(std::cin >> m >> n, m){
		std::vector<int> pv;
		for(int i=1;i<=m;i++){
			pv.push_back(i);
		}
	
		bool locked = false;//1人になった時点で無視しよう
		int who = 0;

		for(int i=1;i<=n;i++){
			std::string str;
			std::cin >> str;
			if(locked){//もう,ひとり
				continue;
			}
			if(isTrue(i, str)){

			}else{
				pv.erase(pv.begin() + who);
				if(pv.size() == 1){
					locked = true;
				}
				who--;
			}
			who = (who + 1) % pv.size();
		}

		std::cout << pv[0];
		for(int i=1;i<pv.size();i++){
			std::cout << " " << pv[i];
		}
		std::cout << "\n";
	}
}