christmas 질문입니다.

  • conankun
    conankun

    문제가 없어 보이는데
    judge에서는 cs[i] >= 0 && cs[i] < k(cs[i]를 참조하는 모든 곳) 이 아닌 경우가 발생해서 런타임에러가 계속뜨네요.
    main arr배열에서 누적합을 구했고, 그뒤 k로 나눈 나머지를 집어넣었는데 0보다 작은 경우나 k보다 큰 원소가 나올수있는게 좀 이상하네요..

    #include<iostream>
    #include<vector>
    #define MOD 20091101
    typedef long long ll;
    using namespace std;
    void p1(const vector<int> &cs, const int &n, const int &k) {
        vector<int> modu(k, 0);
        int i;
        modu[0] = 1;
        for (i = 1; i <= n; i++) {
            modu[cs[i]]++;
        }
        ll sum = 0;
        for (i = 0; i < k; i++) {
            sum += (modu[i]*(modu[i]-1))/2;
            sum %= MOD;
        }
        printf("%lld ", sum);
    }
    void p2(const vector<int> &cs, const int &n, const int &k) {
        vector<int> dp(n + 1, 0);
        vector<int> lp(k, -1);
        int i;
        lp[0] = 0;
        for (i = 1; i <= n; i++) {
            dp[i] = dp[i - 1];
            int s = 0;
            if(lp[cs[i]] != -1) s=dp[lp[cs[i]]] + 1;
            if (s > dp[i]) dp[i] = s;
            lp[cs[i]] = i;
        }
        printf("%d\n", dp[n]);
    }
    int main() {
        int t;
        scanf("%d", &t);
        while (t--) {
            int n, k;
            scanf("%d%d", &n, &k);
            int i;
            vector<int> arr(n+1, 0);
            for (i = 1; i <= n; i++) {
                scanf("%d", &arr[i]);
                arr[i] += arr[i - 1];
            }
            for (i = 1; i <= n; i++) arr[i] %= k;
            p1(arr, n,k);
            p2(arr, n, k);
    
        }
    }
    

    8년 전
1개의 댓글이 있습니다.
  • 샥후
    샥후

    arr을 누적하면 최대 몇까지 나올 수 있는지 생각해보세요


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