質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%

Q&A

解決済

1回答

373閲覧

mapとcountの使い方があやふやです。。

cunwe

総合スコア65

0グッド

0クリップ

投稿2020/04/29 11:41

https://atcoder.jp/contests/abc044/tasks/abc044_b
こちらの問題を解いてACとなっている方のコードをお借りしまして、自分でどのようなことをやっているのかを調べてる過程でわからなかったところをコメント文で追記したのですがif (check.count(i)) continue;の文がどういう意味なのかがわかりません。この文の意味がわかる方よろしくお願い致します。

#include <bits/stdc++.h> using namespace std; int main(){ string s; cin >> s; sort(s.begin(),s.end());//これによって数字1-9▶英大文字A-Z▶英小文字a-zの順に優先的に前に来て並ぶ map<char,bool> check; for(char i:s){//for(変数宣言:範囲) if (check.count(i)) continue; else { int t = count(s.begin(),s.end(),i);//第3引数は探したい対象 if (t % 2 != 0){ cout << "No" << "\n"; return 0; } } } cout << "Yes" << "\n"; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/04/29 11:48

これ、正しく動くんですか?
yumetodo

2020/04/29 11:51

そもそも入力がひとつな時点でもう壊れてる。何を何で検索したいのさ。 それ以外も壊れまくってるわけですが
cunwe

2020/04/30 04:45

これでAC(Accepted)となっていますね、、
guest

回答1

0

ベストアンサー

map も sort も必要ない。
コレ↓で十分

C++

1#include <iostream> 2#include <string> 3#include <algorithm> 4 5int main() { 6 std::string s; 7 std::cin >> s; 8 9 bool beautiful = true; 10 for (char i : s) {//for(変数宣言:範囲) 11 size_t t = std::count(s.begin(), s.end(), i);//第3引数は探したい対象 12 if (t % 2 != 0) { 13 beautiful = false; 14 break; 15 } 16 } 17 std::cout << (beautiful ? "Yes" : "No") << std::endl; 18}

実際checkは何もつかわれていない。
まったくの無駄なので、if (check.count(i)) continue;の文がどういう意味なのかわからなくていい。

[追記] ここまで短くなる。multiset::count を使った例

C++

1#include <iostream> 2#include <string> 3#include <algorithm> 4#include <set> 5 6int main() { 7 std::string s; 8 std::cin >> s; 9 10 std::multiset<char> hist(s.begin(), s.end()); 11 bool beautiful = std::all_of(s.begin(), s.end(), 12 [&](char ch) { return hist.count(ch) % 2 == 0;}); 13 std::cout << (beautiful ? "Yes" : "No") << std::endl; 14}

[追追記] さらに、multisetすら要らない。

C++

1#include <iostream> 2#include <string> 3#include <algorithm> 4 5int main() { 6 std::string s; 7 std::cin >> s; 8 9 bool beautiful = 10 std::all_of(s.begin(), s.end(), 11 [&](char ch) { return std::count(s.begin(), s.end(), ch) % 2 == 0;}); 12 std::cout << (beautiful ? "Yes" : "No") << std::endl; 13}

投稿2020/04/29 12:00

編集2020/04/29 12:16
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cunwe

2020/04/30 04:52

3つも解法をご提示いただきありがとうございます。確かにmapを使わなくても解けるのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問