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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

816閲覧

C++ AtCoder ABC111 C問題でACできない

tanakanakanka

総合スコア1

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/06/05 15:30

表題の通り、AtCoder ABC111Cのテストケースが1つだけクリアできません。
自分で考えてみてもわからなかったので、コードのミスをご指摘いただければと思います。
言語はC++14 (GCC 5.4.1)です。

問題

https://atcoder.jp/contests/abc111/tasks/arc103_a

該当のソースコード

C++

1#include <bits/stdc++.h> 2#define rep(i,n) for (int i = 0; i < (n); ++i) 3using namespace std; 4 5int main() { 6 int n, odd, even; 7 cin >> n; 8 vi ocnt(100001); 9 vi ecnt(100001); 10 rep(i,n/2){ 11 cin >> odd; 12 ocnt.at(odd) ++; 13 cin >> even; 14 ecnt.at(even) ++; 15 } 16 17 odd=0, even=0; 18 int odd2=0, even2=0, oddc=0, evenc=0; 19 20 rep(i,100001){ 21 if(odd < ocnt.at(i)){ 22 odd = ocnt.at(i); 23 oddc = i; 24 } 25 else if(odd2 <= ocnt.at(i) && odd >= ocnt.at(i)){ 26 odd2 = ocnt.at(i); 27 } 28 if(even < ecnt.at(i)){ 29 even = ecnt.at(i); 30 evenc = i; 31 } 32 else if(even2 <= ecnt.at(i) && even >= ecnt.at(i)){ 33 even2 = ecnt.at(i); 34 } 35 } 36 37 int ans = 0 ; 38 if (oddc==evenc) ans = max(odd+even2,odd2+even); 39 else ans = odd+even; 40 41 cout << n-ans << endl; 42 return 0; 43}

試したこと

https://www.dropbox.com/sh/nx3tnilzqz7df8a/AAClmeEJAUwxaXOS1FwSLDpMa/ABC111/C/in?dl=0&preview=top2_2.txt&subfolder_nav_tracking=1

上記のテストケースで74372を出力しており、解答の74371と相違しているのは確認しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

2番目の最頻値が正しく求まっていないと思います

12 1 9 2 9 2 9 9 9 9 9 9 9

coutcerr でログを出しながら確認すると良いです

投稿2020/06/05 16:04

maai

総合スコア463

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

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

tanakanakanka

2020/06/06 05:20

ありがとうございます。 確かに1番目の最頻値が変わった際に、2番めの最頻値にスライドしないようになっていますね… 書き直してACできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問