PAT高度1048枚の検索コイン(25)[ハッシュハッシュ]

タイトル

エヴァ愛は火星のようないくつかの他の惑星を含め、宇宙各地からコインを収集します。ある日、彼女が支払とコインのすべての種類を受け入れることができるユニバーサルショッピングモールを訪問しました。しかし、支払いの特別な要件がありました:各法案のために、彼女は唯一の正確な金額を支払うことを、正確に2枚のコインを使用することができます。彼女は彼女のように多くの105としてコインを持っているので、彼女は間違いなくあなたの助けを必要とします。あなたが、彼女はそれを支払うために2枚のコインを見つけることができるかどうか、お金の任意の金額を、彼女に言うことになっています。
入力仕様:
各入力ファイルは、1つのテストケースが含まれています。N(<= 105、各場合について、最初の行は、2つの正数含ま
コインの総数)とM(<= 103、エヴァが支払わなければならない金額を)。2行目には含まれてい
すべての正数ラインにこれ以上500以下のすべての番号がされているコインのN面値、
空白で区切られました。
出力仕様:
各テストケースについて、1つのラインの印字2つの顔は、V1とV2(スペースで区切られた)は、このようなV1 + V2こと値
= M及びV1 <V2 =。このようなソリューションは、最小V1とユニークな、出力1ではない場合。何も存在しない場合は
ソリューションは、出力「いいえソリューション」の代わりに。
サンプル入力1:
8 15
1 2 8 7 2 4 11 15
出力例1:
4 11
サンプル入力2:
7 14
1 8 2 7 4 11 15
出力例2:

トピック分析

  1. エントリのコイン金種出現保存INT TS [1001]、
  2. INTコイン[N]、コイン格納された入力
  3. 出現統計の数の入力、額面
  4. ソート(昇順にソートされた硬貨の)
  5. 入力されたコインを横切る、M-は、コイン金種の硬貨の金種が現在の入力に現れたか否か判断されます
    • コイン[i]を== M-コイン[i]は、M-コイン[i]には、最小値の2倍の額面金額を表示された場合
    • もしコイン[I] <M-コイン[i]は、M-コイン[i]の金種以上発生回
    • コイン[I]> M-コイン[i]の場合は、条件A1 <= A2を満たしていません

エラーが発生しやすいポイント

  1. A1 <= A2(自分のバグ)
  2. TSの額面が記録されているので、M = 999(M = 1000の最大公称値を検索することが可能である:TS代わりに501(<= 500の1 <公称値が、0 <M <= 1000件名知られている)から、1001サイズに設定されなければなりませんサイズがTS 500に設定されている場合、V1 = 1)ここで、発生数は、添字が範囲外であろう。(自身のバグ)

コード

コード01

#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc,char * argv[]) {
    int N,M;
    scanf("%d %d",&N,&M);
    int coins[N]= {0};
    int values[1001]= {0};
    for(int i=0; i<N; i++) {
        scanf("%d",&coins[i]);
        values[coins[i]]++;
    }
    sort(coins,coins+N);
    int i;
    for(i=0; i<N; i++) {
        if((coins[i]==M-coins[i]&&values[coins[i]]>=2)
                ||(coins[i]<M-coins[i]&&values[M-coins[i]]>=1)) { //!= 第二个点错误 
            printf("%d %d", coins[i], M-coins[i]);
            break;
        }
    }
    if(i==N)printf("No Solution");
    return 0;
}


おすすめ

転載: www.cnblogs.com/houzm/p/12238561.html