제출 #631271

#제출 시각아이디문제언어결과실행 시간메모리
631271uyluluPalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
1 ms388 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ld long double #define endl "\n" const int N = 19; int dp[N + 1][12][12][2][2]; string s; int f(int pos,int i1,int i2,int tight,int front) { if(pos == s.size()) return 1; if(dp[pos][i1][i2][tight][front] != -1) return dp[pos][i1][i2][tight][front]; int res = 0,lim = 9; if(tight) { lim = s[pos] - '0'; } for(int i = 0;i <= lim;i++) { if(i == i1 || i == i2) { if(i == 0) { if(!front) continue; } else continue; } int ns = 0; int asd = front; if(i2 != 0 && i2 != 11) asd = false; if(i == lim) ns = tight; res += f(pos + 1,i2,i,ns,asd); } // cout<<pos<<" "<<i1<<" "<<i2<<" "<<front<<" "<<res<<" "<<lim<<endl; return dp[pos][i1][i2][tight][front] = res; } int help(int x) { s = to_string(x); memset(dp,-1,sizeof(dp)); return f(0,11,11,1,true); } bool check(string temp) { for(int i = 1;i < temp.size();i++) { if(temp[i] == temp[i - 1]) return false; if(i >= 2 && temp[i] == temp[i - 2]) return false; } return true; } int cnt(int x) { int res = 0; for(int i = 0;i <= x;i++) { res += check(to_string(i)); } return res; } signed main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int a,b; cin>>a>>b; if(a == 0) { cout<<help(b)<<endl; } else { cout<<help(b) - help(a - 1)<<endl; } }

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

numbers.cpp: In function 'long long int f(long long int, long long int, long long int, long long int, long long int)':
numbers.cpp:15:9: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |  if(pos == s.size()) return 1;
      |     ~~~~^~~~~~~~~~~
numbers.cpp: In function 'bool check(std::string)':
numbers.cpp:44:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |  for(int i = 1;i < temp.size();i++) {
      |                ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...