CHRISTMAS 알고책대로 했는데 오답이 나오네용 ㅡㅡ;

  • cjkis
    cjkis
    #include <iostream>
    #include <algorithm>
    #include <cassert>
    #include <cfloat>
    #include <climits>
    #include <cstring>
    #include <numeric>
    #include <vector>
    
    using namespace std;
    
    int dollCount, childCount;
    vector<int> dolls;
    
    int waysToBuy(const vector<int>& psum, int k){
        const int MOD = 20091101;
        int ret = 0;
        vector<long long> count(k, 0);
        for (int i = 0; i < psum.size(); i++){
            count[psum[i]]++;
        }
    
        for (int i = 0; i < k; i++){
            if (count[i] >= 2){
                ret = (ret + ((count[i] * (count[i - 1] - 1)) / 2)) % MOD;
            }
        }
        return ret;
    }
    
    int maxBuys(const vector<int>& psum, int k){
        vector<int> ret(psum.size(), 0);
        vector<int> prev(k, -1);
        for (int i = 0; i < psum.size(); i++){
            if (i>0) ret[i] = ret[i - 1];
            else ret[i] = 0;
    
            int loc = prev[psum[i]];
            if (loc != -1) ret[i] = max(ret[i], ret[loc] + 1);
            prev[psum[i]] = i;
        }
        return ret.back();
    }
    
    int main(){
        int testCase;
        cin >> testCase;
        for (int t = 0; t < testCase; t++){
            cin >> dollCount >> childCount;
            dolls.resize(dollCount);
            vector<int> psum(1, 0);
            for (int i = 0; i < dollCount; i++){
                cin >> dolls[i];
                psum.push_back((dolls[i] + psum.back()) % childCount);
            }
    
            cout << waysToBuy(psum, childCount) << " " << maxBuys(psum, childCount) << endl;
        }
        return 0;
    }
    

    이렇게 하는거 아닌가요? ㅠㅠ

    소스에 크리스마스소스가 빠져있네용..

    설명 읽어도 잘 모르겠고,. 큭큭..

    waysToBuy, maxBuys 함수 사용법좀 알려주실 분? ㅠ ㅠ


    9년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan

    책의 오류입니다. (...)

    정오표 에서 606쪽 부분을 참고해 주세요. 혼란을 드려 죄송합니다.


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.