제출 #650483

#제출 시각아이디문제언어결과실행 시간메모리
650483swagchickenPalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
1 ms340 KiB
/* ID: swagchicken1 PROG: LANG: C++11 */ #include <iostream> #include <tuple> #include <cmath> #include <string> #include <cstring> #include <vector> #include <deque> #include <queue> #include <stack> #include <map> #include <unordered_map> #include <set> #include <unordered_set> #include <algorithm> #include <vector> #include <fstream> #include <iomanip> #include <ctime> #include <cctype> #include <climits> #include <chrono> #include <numeric> #include <functional> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector< vector <int> > vvi; typedef pair<int, int> pii; typedef pair < pair < int, int >, int > piii; typedef pair < pair <int, int > , pair <int, int> > piiii; typedef pair<ll, ll> pll; typedef vector<bool> vb; typedef vector<char> vc; typedef vector<string> vs; #define FOR(i,a,b) for(int i = a; i < b; i ++) #define RFOR(i,a,b) for(int i = a-1; i >= b; i --) #define all(a) a.begin(), a.end() #define endl '\n'; #define sz(x) (int)(x).size() #define mp make_pair #define pb push_back #define ff first #define ss second template <typename T> void pr(vector<T> &v) { FOR(i, 0, sz(v)) cout << v[i] << " "; cout << endl; } template <typename T> void pr(vector<vector<T> > &v) { FOR(i, 0, sz(v)) { pr(v[i]); } } template <typename T> void re(T &x) { cin >> x; } template <typename T> void re(vector<T> &a) { FOR(i, 0, sz(a)) re(a[i]); } template <class Arg, class... Args> void re(Arg &first, Args &... rest) { re(first); re(rest...); } template <typename T> void pr(T x) { cout << x << endl; } template <class Arg, class... Args> void pr(const Arg &first, const Args &... rest) { cout << first << " "; pr(rest...); cout << endl; } void ps() { cout << endl; } template<class T, class... Ts> void ps(const T& t, const Ts&... ts) { cout << t; if (sizeof...(ts)) cout << " "; ps(ts...); } const ll MOD = 998244353; #define inf 1e18; #define INF INT_MAX //#define DEBUG long double PI = 4*atan(1); long double eps = 1e-9; ll dp[20][2][2][11][11] = {}; ll recurse(int idx, int tight, int iszero, int p1, int p2, string& S) { if(idx == S.length()) { return 1; } if(dp[idx][tight][iszero][p1][p2] != -1) { return dp[idx][tight][iszero][p1][p2]; } dp[idx][tight][iszero][p1][p2] = 0; int upper = ((tight) ? S[idx] - '0' : 9); for(int i = 0; i <= upper; i++) { if(i == p1 || i == p2) continue; int nidx = idx + 1; int ntight = (tight & (i == upper)); int niszero = (iszero & (i == 0)); int np2 = 10; int np1 = 10; if(!niszero) { np2 = p1; np1 = i; } // vi output = {nidx, i, ntight, niszero, np1, np2}; // pr(output); dp[idx][tight][iszero][p1][p2] += recurse(nidx, ntight, niszero, np1, np2, S); } return dp[idx][tight][iszero][p1][p2]; } ll solve(ll n) { memset(dp, -1, sizeof(dp)); string ns = to_string(n); return recurse(0,1,1,10,10,ns); } int main() { // auto start = chrono::high_resolution_clock::now(); ios_base::sync_with_stdio(0);cin.tie(0); //ofstream cout("output.txt"); //ifstream cin("input.txt"); #ifdef DEBUG freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); // freopen("art2.in", "r", stdin); // freopen("art2.out", "w", stdout); #endif ll a,b; cin >> a >> b; ll v1 = solve(b); ll v2 = solve(a-1); // cout << v1 << endl; // cout << v2 << endl; cout << v1 - v2 << endl; // auto stop = chrono::high_resolution_clock::now(); // auto duration = chrono::duration_cast<chrono::microseconds>(stop - start); // cout << duration.count() << endl; //cin.close(); //cout.close(); }

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

numbers.cpp: In function 'll recurse(int, int, int, int, int, std::string&)':
numbers.cpp:104:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |     if(idx == S.length()) {
      |        ~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...