제출 #440769

#제출 시각아이디문제언어결과실행 시간메모리
440769training4usacoLongest beautiful sequence (IZhO17_subsequence)C++11
컴파일 에러
0 ms0 KiB
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
int main(){
    int n;
    cin >> n;
    int a[n+1], k[n+1];
    for (int i = 1; i <= n; i++) {
      cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
      cin >> k[i];
    }
 
    int popCnt[1024];
    for (int i = 0; i < 1024; i++) {
      popCnt[i] = __builtin_popcount(i);
    }

    static int dp[1024][1024][11];
    memset(dp, 0, sizeof(dp));
    //at index i what is the longest chain you can form
    int best[n+1];
    fill(best, best+n+1, 0);
    //at index i what is the first element in the longest
    //chain you can form so far
    int store[n+1];
    
    for (int i = 1; i <= n; i++){
        int right = a[i]&1023;
        int left = a[i]>>10;
        int idx = 0;
 
        for (int mask = 0; mask < 1024; mask++){
            int b = k[i]-popCnt[(right&mask)];
            if (b >= 0 and b <= 10)
                if (best[dp[left][mask][b]] > best[idx])
                    idx = dp[left][mask][b];
        }
 
        best[i] = best[idx]+1;
        store[i] = idx;
 
        for (int mask = 0; mask < 1024; mask++){
            int b = popCnt[(left&mask)];
            if (best[i] > best[dp[mask][right][b]])
                dp[mask][right][b] = i;
        }
    }
 
    int pos = max_element(best, best+n+1)-best;
    vector<int> res;
    while (pos != 0){
        res.push_back(pos);
        pos = store[pos];
    }
    reverse(res.begin(), res.end());
    cout<<res.size()<<endl;
    for (int i = 0; i < res.size(); i++) cout<<res[i]<<" ";
} 

컴파일 시 표준 에러 (stderr) 메시지

subsequence.cpp: In function 'int main()':
subsequence.cpp:23:5: error: 'memset' was not declared in this scope
   23 |     memset(dp, 0, sizeof(dp));
      |     ^~~~~~
subsequence.cpp:4:1: note: 'memset' is defined in header '<cstring>'; did you forget to '#include <cstring>'?
    3 | #include <vector>
  +++ |+#include <cstring>
    4 | using namespace std;
subsequence.cpp:61:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |     for (int i = 0; i < res.size(); i++) cout<<res[i]<<" ";
      |                     ~~^~~~~~~~~~~~