codelic(プログラミングサイト)のdemo taskの問題で、不正解コードのダメな箇所がわかりません。
答えに違いが出る理由を教えてほしいです。
問題文
試したこと
- C1カバレッジでの動作確認は共に同じとなることを確認した
- codelic側テストプログラムでは、performance testは全件OK(4/4)した。一方、correctness test casesは1/5となり正しく期待値を出せていないケースがある
- 別の方法で正解コードは出せた。ただし、正解コードと不正解コードを比較してどこに問題があるのかわからない
code
c++
1//不正答コード 2int solution(vector<int> &A) { 3 int ans=1; 4 int Asize=A.size(); 5 sort(A.begin(),A.end()); 6 7 //A[i]の最大値が0以下である場合は、1を返す。A={-1,-3}のケース; 8 if(A[Asize-1]<=0) return 1; 9 10 //A[]の最大値が1以上。A={-1,1,3,6,4,1,2};のケース 11 for(int i=0; i<Asize;i++){ 12 if(ans>=A[i]){//条件① 13 }else if((ans+1) ==A[i]){//条件② 14 ans++; 15 }else{//条件③ 16 return ++ans; 17 } 18 } 19 20 //A={1,2,3}のケース、正の値がきちんと 21 return ++ans; 22}
不正答コードの、A={-1,1,3,6,4,1,2};のケースの動作の参考として、以下のスクリーンショットを添付します。
以下は、正解したコードになります。
c++
1//正答したコード 2int solution(vector<int> &A) { 3 int ans=1; 4 int Asize=A.size(); 5 sort(A.begin(),A.end()); 6 7 // rep(i,Asize){ 8 for(int i=0; i<Asize;i++){ 9 if(A[i] <= 0){ 10 11 }else if(A[i] == ans){ 12 ans++; 13 } 14 } 15 return ans; 16}
code全文
c++
1//不正解コード 2#define _GLIBCXX_DEBUG//配列外参照のデバッグ用 3 4#include <bits/stdc++.h> 5#define rep(i, n) for (int i = 0; i < (n); ++i) 6#define rep1(i, n) for (int i = 1; i <= (n); ++i) 7using namespace std; 8using ll = long long; 9using P = pair<int, int>; 10 11//1 <= int N <= 10^5 12//int A[i]:-10^6 to 10^6 13int solution(vector<int> &A) { 14 int ans=1; 15 int Asize=A.size(); 16 sort(A.begin(),A.end()); 17 18 //A[i]の最大値が0以下である場合は、1を返す。A={-1,-3}のケース; 19 if(A[Asize-1]<=0) return 1; 20 21 //A[]の最大値が1以上。A={-1,1,3,6,4,1,2};のケース 22 for(int i=0; i<Asize;i++){ 23 if(ans>=A[i]){ 24 }else if((ans+1) ==A[i]){ 25 ans++; 26 }else{ 27 return ++ans; 28 } 29 } 30 31 //A={1,2,2,3}のケース 32 return ++ans; 33} 34 35int main(){ 36 {vector<int> A={-1,1,3,6,4,1,2}; 37 cout << solution(A) << endl;} 38 {vector<int> A={1,2,2,3}; 39 cout << solution(A) << endl;} 40 {vector<int> A={-1,-3}; 41 cout << solution(A) << endl;} 42 return 0; 43}
回答1件
あなたの回答
tips
プレビュー