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

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

新規登録して質問してみよう
ただいま回答率
85.48%
デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

プログラミング言語

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

C++

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

Q&A

解決済

1回答

1889閲覧

競技プログラミング 反例(デバッグ)

van-0215

総合スコア89

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

プログラミング言語

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

C++

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

0グッド

1クリップ

投稿2015/05/30 14:26

競技プログラミング,PCK2014の予選5門目についてです。
AOJ0299/PCK14予選5問目
上記がその問題です。
そして下記に示すのが先ほどまでに書いた、私のC++を使用した、プログラムです。
いくつかの反例に気づき、デバッグ作業をしましたが、オンラインジャッジサイトAOJでは、部分点しかもらえません。
なぜACしないのかが自分の頭では思いつかなかったので、皆様にお力添えをいただく、質問をしている次第です。
反例が分かりましたら、コメントの方よろしくお願いします。

※尚、下記のソースは確認用の出力が関数内に多くに存在します。お見苦しい限りですが、初心者ですので暖かい目での閲覧の方よろしくお願いします。

lang

1#include <iostream> 2#include <algorithm> 3#include <stdlib.h> 4#include <cstdio> 5#include <map> 6#define X 1111111 7#define F first 8#define S second 9using namespace std; 10typedef pair <int,pair<int,int> > P; 11void near(void); 12void unclock(void); 13int ans=0; 14int n,m,p;//左から、駅の数、目的地の数、出発駅 15int a[111111];//目的地の配列 16int x[111111];//今入る地点から反時計回りでのその目的地へ到達するための距離 17int kakutei[111111];//まわり方で早い方の目的地につくまでの小さい奴が入ってる 18int cnt=0; 19int d[111111]={0};//フラグ的な意 20int main(){ 21 cin >> n >> m >> p; 22 for(int i=0;i<m;i++){ 23 cin >> a[i]; 24 } 25 for(int i=0;i<m;i++){ 26 /*どこの目的地が今入るところから一番近いか*/ 27 unclock(); 28 29 //1-2.目的地につくまでの経路として時計回りか反時計回りどちらが近いか 30 near(); 31 } 32 /*for(int i=0;i<n;i++){ 33 cout << d[i] << endl; 34 }*/ 35 cout << ans << endl; 36} 37 38//1-1反時計回りの場合 39void unclock(void){ 40 int test;//目的地コピー用 41 for(int i=0;i<m;i++){ 42 if(d[i]==1)continue; 43 test=a[i]; 44 cnt=0; 45 //cout << test << endl; 46 for(;;){ 47 //cout << test << endl; 48 if(test==p){ 49 x[i]=cnt; 50 //cout << x[i] << endl; 51 break; 52 } 53 test--; 54 cnt++; 55 if(test==-1){ 56 test=n-1; 57 } 58 } 59 } 60 return; 61} 62 63void near(void){ 64 int test;//目的地コピー用 65 P pa[1111]; 66 for(int i=0;i<m;i++){ 67 pa[i]=(make_pair(X, make_pair(X, X) ) ); 68 } 69 int k=0; 70 for(int i=0;i<m;i++){ 71 int check=0; 72 if(d[i]==1)continue; 73 test=a[i]; 74 for(;;){//時計回りでの距離 75 test++; 76 check++; 77 if(test==n)test=0; 78 if(test==p)break; 79 } 80 //cout << endl; 81 //cout << check << " " << x[i] << endl; 82 //check=abs(a[i]-p); 83 //cout << a[i] << " " << p << endl; 84 kakutei[i]=min(x[i],check); 85 pa[k]=(make_pair(kakutei[i], make_pair(a[i], i) ) ); 86 k++; 87 // cout << endl << kakutei[i] << endl; 88 } 89 //cout <<endl<< k << endl; 90 //cout << "そこまでの最短距離"<<pa[0].F << " そこの駅番号" << pa[0].S.F << " そこの番地" << pa[0].S.S << " 今いる場所" <<p << endl; 91 sort(pa,pa+m);//昇順にソート 92 ans+=pa[0].F*100;//値段に換算 93 p=pa[0].S.F; 94 d[pa[0].S.S]=1;//フラグを立てておく(既にいったを表す) 95 //cout << "そこまでの最短距離"<<pa[0].F << " そこの駅番号" << pa[0].S.F << " そこの番地" << pa[0].S.S << " 今いる場所" <<p << endl; 96 return; 97} 98 99 100 101

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

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

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

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

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

ozwk

2015/05/30 15:05

「いくつかの反例に気づき、デバッグ作業をしましたが」←内容が全く書かれてませんがどういうことですか?
van-0215

2015/05/30 20:58

ozwkさん、ありがとうございます。 「いくつかの反例に気づき、デバッグ作業をしましたが」というのは、既に動作が完了しているため、書かなくてもいいかなと自己判断をしました。(0番目の駅を越えると値がおかしくなるなど)  回答の方ですが、現在記入したプログラム内でおかしなとこや反例があったら、そちらを教えていただきたいと思います。
guest

回答1

0

ベストアンサー

lang

1100 4 0 22 310 495 599

こんなんいかがでしょう。
ご提示のコードを手前の環境で実行したところ 2600 と出ましたが、
正解はおそらく 2000 だと思います。

投稿2015/05/31 05:57

編集2015/05/31 10:27
IchigoTaruto

総合スコア159

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

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

van-0215

2015/05/31 09:50

回答の方ありがとうございます。 申し訳ございません、そちらのサンプル要素が1つ足りないのですが、いかがでしょうか?
IchigoTaruto

2015/05/31 10:26

失礼しました。 間違っておりました。 100 4 0 2 10 95 99 です。
van-0215

2015/06/02 11:42

遅くなってしまい、申し訳ございませんでした。 おかげさまで理解することができました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問