제출 #1326559

#제출 시각아이디문제언어결과실행 시간메모리
1326559Jawad_Akbar_JJPaint By Numbers (IOI16_paint)C++20
59 / 100
1 ms332 KiB
#include <iostream> #include <vector> using namespace std; const int N = 1<<18; int dp1[N][100], dp2[N][100]; int pre[N], dfa[N]; string solve_puzzle(string s, vector<int> c){ s = '_' + s + '_'; c.insert(c.begin(), 1); int n = s.size() - 1, k = c.size() - 1; for (int i=0;i<=n;i++) pre[i] = (i == 0 ? 0 : pre[i-1]) + (s[i] == '_'); dp1[0][0] = dp2[n][k+1] = 1; for (int i=0;i<=n;i++){ for (int j=k;j>=0;j--){ if (i) dp1[i][j] |= dp1[i-1][j] & (s[i] != 'X'); } for (int j=1;j<=k;j++) if (i + c[j] < n and pre[i+c[j]] - pre[i] == 0) dp1[i+c[j]+1][j] |= dp1[i][j-1]; } for (int i=n;i>=0;i--){ for (int j=k+1;j>=1;j--) dp2[i][j] |= dp2[i+1][j] & (s[i] != 'X'); for (int j=k;j>=1;j--){ if (i - c[j] > 0 and pre[i-1] - pre[i - c[j] - 1] + (s[i - c[j] - 1] == 'X') == 0){ dp2[i - c[j] - 1][j] |= dp2[i][j+1]; if (dp2[i][j+1] and dp1[i - c[j] - 1][j - 1]) dfa[i - c[j]] += 2, dfa[i] -= 2; } } } string ans, val = " _X?"; for (int i=1;i<n;i++){ dfa[i] += dfa[i-1]; int num = (!!dfa[i]) * 2; for (int j=0;j<=k;j++) if (dp1[i][j] and dp2[i][j+1]) num |= 1; ans += val[num]; } return ans; }

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

paint.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
paint_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...