#include #include #include #include using namespace std; /** @breif にゃんぱす格納関数 @param collection 格納する挨拶コンテナ @note vectorは村民1に対する相手jの挨拶が格納される。 mapには村民jの村民1相手以外の挨拶が格納される。 つまり、vectorが挨拶行列の列、mapが挨拶行列の行を指す。 **/ void InputToCollection(vector>* collection, int max_size) { for (int i = 0; i < max_size; i++) { string word; cin >> word; (*collection)[i].emplace(word, 0); } } /** @breif にゃんぱす検索関数 @param collection 検索する村人の挨拶コンテナ @retval -1以外 れんちょんの村民番号 @retval -1 れんちょんを特定できない **/ int FindNyanpass(vector>* collection) { int find = -1; // れんちょんは誰に対しても"nyanpass"と挨拶するので // mapの最後尾(map::endの1つ前の要素)だけ調べればよい for (int nyan_index = 0; nyan_index < collection->size(); nyan_index++) { if ((--(*collection)[nyan_index].end())->first == "nyanpass") { if (find == -1) find = nyan_index + 1; else { find = -1; break; } } } return find; } int main() { vector> nya_collection; int nya_max; cin >> nya_max; nya_collection.resize(nya_max); for (int i = 0; i < nya_max; i++) InputToCollection(&nya_collection, nya_max); cout << FindNyanpass(&nya_collection); return 0; }