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

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

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

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

Q&A

解決済

1回答

1358閲覧

atcoder 151C問題でACできない

goro_gnm

総合スコア42

C++

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

0グッド

0クリップ

投稿2020/01/12 14:38

atcoder ABC 151C で WA がでてしまいます。
自分でいろいろ考えてもわからなかったので、コードのミスを指摘してもらえるとたすかります。

問題

高橋君は AtCoder のコンテストに参加しています。

このコンテストでは、 N 問の問題が出題されます。高橋君はコンテスト中に M 回の提出を行いました。
i 回目の提出は pi 番目の問題への提出であり、結果は Si (AC または WA) でした。高橋君の正答数は、AC を 1 回以上出した問題の数です。高橋君のペナルティ数は、高橋君が AC を 1 回以上出した各問題において、初めて AC を出すまでに出した WA の数の総和です。
高橋君の正答数とペナルティ数を答えてください。

制約

  • N , M , pi は整数
  • 1≤N≤10^5
  • 0≤M≤10^5
  • 1≤pi≤N
  • Si は AC か WA のいずれか

自分のコード

c++

1#include<iostream> 2#include<string> 3using namespace std; 4typedef long long ll; 5 6 7int main(){ 8 ll N, M; cin >> N >> M; 9 string s[M]; 10 ll p[M], AC_num=0, pena[N], problem[N], temp; 11 for(int i=0; i<M; i++){ 12 cin >> p[i] >> s[i]; 13 } 14 for(int i=0; i<N; i++){ 15 problem[i] = 0; 16 pena[i] = 0; 17 } 18 for(int i=0; i<M; i++){ 19 if(s[i] == "WA" && problem[p[i]-1] == 0){ 20 pena[p[i]-1] += 1; 21 }else if(s[i] == "AC" && problem[p[i]-1] == 0){ 22 problem[p[i]-1] = 1; 23 } 24 } 25 ll ans_AC=0, ans_penalty=0; 26 for(int i=0; i<N; i++){ 27 ans_AC += problem[i]; 28 ans_penalty += pena[i]; 29 } 30 cout << ans_AC << " " << ans_penalty << endl; 31}

ちなみに他の人のコードを参考に以下のように書き換えたものは全てACとなったのですが、なぜ下のコードならいけて上のコードならだめなのかわからないという状況です。

ACできたコード

c++

1#include<iostream> 2#include<string> 3using namespace std; 4typedef long long ll; 5 6 7int main(){ 8 ll ans_AC=0, ans_penalty=0; 9 ll N, M; cin >> N >> M; 10 string s[M]; 11 ll p[M], AC_num=0, pena[N], problem[N], temp; 12 for(int i=0; i<M; i++){ 13 cin >> p[i] >> s[i]; 14 } 15 for(int i=0; i<N; i++){ 16 problem[i] = 0; 17 pena[i] = 0; 18 } 19 for(int i=0; i<M; i++){ 20 if(s[i] == "WA" && problem[p[i]-1] == 0){ 21 pena[p[i]-1] += 1; 22 }else if(s[i] == "AC" && problem[p[i]-1] == 0){ 23 problem[p[i]-1] = 1; 24 ans_AC += 1; 25 ans_penalty += pena[p[i]-1]; 26 } 27 } 28 cout << ans_AC << " " << ans_penalty << endl; 29}

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

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

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

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

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

guest

回答1

0

ベストアンサー

ACしてない問題のペナルティも集計されてしまってます。

text

11 1 21 WA

この時0 0になるべきですが0 1になってます。

投稿2020/01/12 14:45

yudedako67

総合スコア2047

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

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

goro_gnm

2020/01/12 14:48

なるほど、見落としていました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問