Submission #528327

#TimeUsernameProblemLanguageResultExecution timeMemory
528327CherryMagicPalindrome-Free Numbers (BOI13_numbers)C++14
0 / 100
1099 ms2404 KiB
#include <iostream> #include <vector> #include <algorithm> #include <cstring> using namespace std; long a,b; long dp[25][10][10][2][2][25]; vector<int> num; long call(int pos, int dig1, int dig2, int notpal, int f, int nz){ if (pos == num.size()){ if (notpal) return 1; return 0; } if (dp[pos][dig1][dig2][notpal][f][nz] != -1) return dp[pos][dig1][dig2][notpal][f][nz]; long res = 0; int lmt; if (f == 0){ lmt = num[pos]; } else lmt = 9; for (int dgt=0;dgt<=lmt;dgt++){ int ndig1, ndig2, nnotpal=notpal, nf=f, nnz=nz; if (f == 0 && dgt < lmt ) nf=1; if (nz<=pos) nnz = nz; else{ if (dgt != 0) nnz = pos+1; else nnz = 23; } if ((pos>=3 && dgt==dig2 && pos>=nz)|| (pos>=4 && dgt==dig1 && pos>=nz+1)) nnotpal=0; ndig1 = dig2; ndig2 = dgt; if (nnotpal) res+= call(pos+1, ndig1, ndig2, nnotpal, nf, nnz); } return dp[pos][dig1][dig2][notpal][f][nz]= res; } long solve(int a){ num.clear(); while (a > 0){ num.push_back(a%10); a/=10; } num.push_back(0); num.push_back(0); reverse(num.begin(), num.end()); memset(dp, -1, sizeof(dp)); return call(2, 0, 0, 1, 0, 23); } int main() { int t; cin >> t; while (t--){ cin >> a >> b; if (a == 0) cout<<solve(b)<<endl; else cout << solve(b) - solve(a-1); } return 0; }

Compilation message (stderr)

numbers.cpp: In function 'long int call(int, int, int, int, int, int)':
numbers.cpp:13:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |     if (pos == num.size()){
      |         ~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...