답안 #283238

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
283238 2020-08-25T11:54:07 Z altalk Palindrome-Free Numbers (BOI13_numbers) C++14
100 / 100
14 ms 384 KB
#include <bits/stdc++.h>
#define loop(a, b) for(int a = 0; a < b; ++a)
#define loop1(a, b) for(int a = 1; a <= b; ++a)
#define loopc(a, c, b) for(int a = c; a < b; ++a)
#define loopcc(a, c, b) for(unsigned long long a = c; a <= b; ++a)
#define loopr(a, b) for(int a = b-1; a >= 0; --a)
#define mp make_pair

using namespace std;

typedef unsigned long long ull;

deque<int> aa, bb;
ull ai, bi, p, av=0, bv=0, v;
set<int> pos;
int prev=-1, prev2=-1, as, bs;
bool af=false, bf=false;

int main() {
    cin >> ai >> bi;

    if (bi - ai < 100001) {
        int t, tot=0;
        loopcc(a, ai, bi) {
            t = 1;
            v = a;
            while(v) {
                aa.push_front(v%10);
                v /= 10;
            }
            if (aa.size() > 0) {
                loop(b, aa.size()-1) {
                    if (aa[b] == aa[b+1]) t = 0;
                }
            }
            if (aa.size() > 1) {
                loop(b, aa.size()-2) {
                    if (aa[b] == aa[b+2]) t = 0;
                }
            }
            tot += t;
            aa.clear();
        }
        cout << tot << endl;
    }
    else {
        ++bi;
        while(ai) {
            aa.push_front(ai%10);
            ai /= 10;
        }
        while(bi) {
            bb.push_front(bi%10);
            bi /= 10;
        }

        //loop(a, 10) pos.insert(a);

        as = aa.size();
        loop(a, as) {
            if (a == 0) {
                loop(h, as) {
                    if (h == 0) {
                        v = aa[0]-1;
                        if (as > 1) v *= 9;
                        loopc(w, 2, as) v *= 8;
                        av = v;
                    }
                    else if (h == as-1) av += 10;
                    else {
                        v = 9;
                        if (as > h+1) v *= 9;
                        loopc(w, h+2, as) v *= 8;
                        av += v;
                    }
                    //cout << av << endl;
                }
            }
            else {


                v = aa[a] - (int)(aa[a] > aa[a-1]);
                if (a > 1 && aa[a-1] != aa[a-2]) v -= (int)(aa[a] > aa[a-2]);
                loopc(w, a+1, as) v *= 8;
                av += v;

                if (aa[a] == aa[a-1]) break;
                if (a > 1 && aa[a] == aa[a-2]) break;
            }
            //cout << a << " " <<av << endl;
        }

        bs = bb.size();
        loop(b, bs) {
            //cout << bb[b]  << " bb"<< endl;
            if (b == 0) {
                loop(h, bs) {
                    if (h == 0) {
                        v = bb[0]-1;
                        if (bs > 1) v *= 9;
                        loopc(w, 2, bs) v *= 8;
                        bv = v;
                    }
                    else if (h == bs-1) bv += 10;
                    else {
                        v = 9;
                        if (bs > h+1) v *= 9;
                        loopc(w, h+2, bs) v *= 8;
                        bv += v;
                    }
                    //cout << bv << endl;
                }
            }
            else {


                v = bb[b] - (int)(bb[b] > bb[b-1]);
                if (b > 1 && bb[b-1] != bb[b-2]) v -= (int)(bb[b] > bb[b-2]);
                loopc(w, b+1, bs) v *= 8;
                bv += v;
                //cout << v << " v" << endl;
                if (bb[b] == bb[b-1]) break;
                if (b > 1 && bb[b] == bb[b-2]) break;
            }
            //cout << b << " " << bv << endl;
        }

        cout << bv - av << endl;
    }
    return 0;
}

Compilation message

numbers.cpp: In function 'int main()':
numbers.cpp:2:37: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    2 | #define loop(a, b) for(int a = 0; a < b; ++a)
......
   32 |                 loop(b, aa.size()-1) {
      |                      ~~~~~~~~~~~~~~  
numbers.cpp:32:17: note: in expansion of macro 'loop'
   32 |                 loop(b, aa.size()-1) {
      |                 ^~~~
numbers.cpp:2:37: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    2 | #define loop(a, b) for(int a = 0; a < b; ++a)
......
   37 |                 loop(b, aa.size()-2) {
      |                      ~~~~~~~~~~~~~~  
numbers.cpp:37:17: note: in expansion of macro 'loop'
   37 |                 loop(b, aa.size()-2) {
      |                 ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 14 ms 256 KB Output is correct
4 Correct 4 ms 256 KB Output is correct
5 Correct 0 ms 256 KB Output is correct
6 Correct 1 ms 256 KB Output is correct
7 Correct 0 ms 256 KB Output is correct
8 Correct 1 ms 256 KB Output is correct
9 Correct 0 ms 256 KB Output is correct
10 Correct 0 ms 256 KB Output is correct
11 Correct 0 ms 256 KB Output is correct
12 Correct 0 ms 256 KB Output is correct
13 Correct 1 ms 256 KB Output is correct
14 Correct 4 ms 256 KB Output is correct
15 Correct 4 ms 256 KB Output is correct
16 Correct 1 ms 256 KB Output is correct
17 Correct 2 ms 256 KB Output is correct
18 Correct 0 ms 256 KB Output is correct
19 Correct 13 ms 256 KB Output is correct
20 Correct 4 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 0 ms 256 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
5 Correct 0 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 0 ms 256 KB Output is correct
8 Correct 0 ms 256 KB Output is correct
9 Correct 0 ms 256 KB Output is correct
10 Correct 0 ms 256 KB Output is correct
11 Correct 0 ms 384 KB Output is correct
12 Correct 0 ms 256 KB Output is correct
13 Correct 1 ms 256 KB Output is correct
14 Correct 0 ms 256 KB Output is correct
15 Correct 0 ms 256 KB Output is correct
16 Correct 1 ms 256 KB Output is correct
17 Correct 1 ms 256 KB Output is correct
18 Correct 1 ms 384 KB Output is correct
19 Correct 0 ms 256 KB Output is correct
20 Correct 0 ms 256 KB Output is correct
21 Correct 0 ms 256 KB Output is correct
22 Correct 0 ms 256 KB Output is correct
23 Correct 0 ms 256 KB Output is correct
24 Correct 0 ms 256 KB Output is correct
25 Correct 1 ms 256 KB Output is correct
26 Correct 0 ms 256 KB Output is correct
27 Correct 0 ms 384 KB Output is correct
28 Correct 0 ms 256 KB Output is correct
29 Correct 0 ms 256 KB Output is correct
30 Correct 0 ms 256 KB Output is correct
31 Correct 1 ms 256 KB Output is correct
32 Correct 0 ms 256 KB Output is correct
33 Correct 1 ms 256 KB Output is correct
34 Correct 0 ms 384 KB Output is correct
35 Correct 0 ms 384 KB Output is correct
36 Correct 0 ms 256 KB Output is correct
37 Correct 1 ms 256 KB Output is correct
38 Correct 1 ms 384 KB Output is correct
39 Correct 1 ms 256 KB Output is correct
40 Correct 1 ms 384 KB Output is correct
41 Correct 0 ms 256 KB Output is correct
42 Correct 0 ms 256 KB Output is correct
43 Correct 0 ms 256 KB Output is correct
44 Correct 0 ms 256 KB Output is correct
45 Correct 0 ms 256 KB Output is correct