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

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

新規登録して質問してみよう
ただいま回答率
85.35%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

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

Q&A

解決済

2回答

929閲覧

どのようなケースで間違いが生じるのかわからない

grape_ll

総合スコア83

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

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

0グッド

1クリップ

投稿2020/09/08 06:39

以下のリンクに示す問題を解いていたのですが,サンプルケースといくつかのケースでは正解,どのようなケースか見えないものでいくつか不正解となってしまい,なぜ間違っているのかを見つけることが出来ませんでした.
式等にミスがあったりすればご指摘をお願いいたいます.
またC++は昨日勉強し始めたばかりで把握している機能があまりないので,この問題を解くうえでもっと便利なものがあれば教えていただきたいです.問題の傾向的に今回はあまりなさそうだなとは感じますが.

また,コードについてなのですが,最後の条件分岐はsignの位置によって変える必要がないのはほぼ書き終わったあとに気づいたので言及してくださらなくても問題ありません.
よろしくお願いいします.

問題

C++

1#include<stdio.h> 2#include<iostream> 3#include<string> 4#include<memory> 5int main(){ 6 7 int N,range; 8 int *series; 9 std::cin>>N>>range; 10 try{ 11 series=new int[N]; 12 }catch(const std::bad_alloc e){ 13 std::cout<<"cannnot be allocated."<<std::endl; 14 } 15 int min=1000001; 16 int sign=0; 17 for(int i=0;i<N;i++) { 18 std::cin>>series[i]; 19 if(series[i]<min) { 20 min=series[i]; 21 sign=i; 22 } 23 } 24 25 //std::cout<<sign<<std::endl; 26 27 int count=0; 28 if(sign==0){ 29 if((N-1)%(range-1)==0){ 30 count=(N-1)/(range-1); 31 } 32 else{ 33 count=(N-1)/(range-1)+1; 34 } 35 } 36 else{ 37 if(sign%(range-1)==0) count=sign/(range-1); 38 else count=sign/(range-1)+1; 39 40 //std::cout<<count<<std::endl; 41 42 if((N-(sign+1))%(range-1)==0) count+=(N-(sign+1))/(range-1); 43 else count+=(N-(sign+1))/(range-1)+1; 44 } 45 46 std::cout<<count<<std::endl; 47 48 49 delete series; 50 return 0; 51} 52

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

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

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

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

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

y_waiwai

2020/09/08 06:50

もうちょっとしっかり勉強しよう。 勉強し始めて数日レベルで、回答受けても理解できるとは思えんがw
mjk

2020/09/08 07:03

公式解説 https://img.atcoder.jp/arc099/editorial.pdf 提出一覧 https://atcoder.jp/contests/arc099/submissions?f.Task=arc099_a&f.LanguageName=C%2B%2B&f.Status=AC&f.User= テストケース https://www.dropbox.com/sh/nx3tnilzqz7df8a/AAAYlTq2tiEHl5hsESw6-yfLa?dl=0 AtCoderには公式解説と提出済みコードとテストケースが公開されているので大抵はそれらを見れば解決するはずです。 自力で解けない問題は模写したり外部サイトで解説検索したりすると良いと思います。
grape_ll

2020/09/09 06:04

テストケースは公開されていたのですね,はじめて知りました. 提出済みコードは,やけに長いのが多かったり,全然読めなかったりするので質問させていただきました.
guest

回答2

0

ベストアンサー

ダメなケース
入力
4 4
3 1 4 2
出力は 1 なのに、そのコードでは 2。

問題では、N、K、(N個の A) が入力なのに、
そのコードでは、K を読み込んでいません。
K と (N-1)個の A を series[i] に読み込んで、
最後の A を読み込んでいません。

追記2
すみません。私の勘違いでした。>>range を見落としていました。

でも、ダメなケースはその通りですよね。

私なら、次のようなコードを書きます。

C++

1#include <iostream> 2 3int main() 4{ 5 int n, k; 6 std::cin >> n >> k; 7 int *a = new int[n]; 8 for (int i = 0; i < n; i++) std::cin >> a[i]; 9 int count = (n - 1) / (k - 1); 10 if ((n - 1) % (k - 1) != 0) count++; 11 std::cout << count << std::endl; 12}

このコードの説明が必要ならコメントにそう書いてください。

そうでなくて、質問のコードのどこが悪いのかを指摘してほしいのなら、
申し訳ないのですが、私にはできません。
そのコードの各部分が何をしているのかの説明を逆にお願いしたいです。

投稿2020/09/09 01:12

編集2020/09/09 06:47
kazuma-s

総合スコア8224

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

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

grape_ll

2020/09/09 06:02

変数の名前を変えてしまったのでわかりにくかったかもしれませんが,kはrangeとして読み込んでいるつもりでしたが,このやり方では入力が読み込めていないのでしょうか?
kazuma-s

2020/09/09 06:48

すみません。私の勘違いでした。
grape_ll

2020/09/09 07:12

見本のコードを書いてくださりありがとうございます. 自分の考え方では,数列の中で一番小さいい数字の右側と左側に分けて数えていたのですが,別に分けないで最小値の部分だけ取り除いてあげれば求まるみたいですね.理解することが出来ました. ご回答ありがとうざいました.
guest

0

外部サイトの解説:AtCoder ARC099 C - Minimization

アルゴリズム的な考え方はここが参考になると思いますよ。
質問やコメントからの推測ですが解法が理解出来ないのでは無いでしょうか?
理屈がわかれば実装は出来るぽいのでコードを書く前に手書きでもメモ帳アプリでも良いので、
法則をみつける手順や解法を箇条書きにすると良いと思います。

私もさっき問題を見て公式の解法を見てすぐには理解出来ませんでしたが、
検索した手書きの図解を見てすっきりしました。

その後自分なりに手書きの箇条書きメモを書いたのでご参考までに。
コードは実装してませんがメモした内容ならすぐにでも実装出来そうなので割愛。
イメージ説明

投稿2020/09/09 07:52

mjk

総合スコア303

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問