멋진 쌍
https://www.acmicpc.net/problem/12924
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 512 MB | 238 | 88 | 76 | 38.191% |
문제
두 자연수 (n, m)이 멋진 쌍일 조건은 다음과 같다.
- n의 뒤에서 몇 자리를 떼서, 앞에 그대로 붙이면 m을 얻을 수 있다.
예를 들어, 12345의 뒤에서 345를 떼서 앞에 붙이면 34512가 되므로, (12345, 34512)는 멋진 쌍이다.
같은 개수의 자릿수를 갖는 두 자연수 A와 B가 주어질 때, A ≤ x < y ≤ B 인 멋진 쌍 (x, y)의 개수를 출력하세요.
입력
첫 번째 줄에 두 자연수 A, B가 주어진다. A ≤ B ≤ 2,000,000, A와 B의 자릿수 개수는 같다.
출력
멋진 쌍의 개수를 자연수 하나로 출력한다.
예제 입력 1
1 9
예제 출력 1
0
예제 입력 2
10 40
예제 출력 2
3
예제 입력 3
100 500
예제 출력 3
156
알고리즘 분류
통과된 코드
중복을 제거하지 않으면 오답으로 처리됩니다.
#include <iostream> #include <string> #include <cmath> #include <set> using namespace std; set<pair<int, int>> _ResSet; int _A, _B, _Res; int FindingDigit(int _number) { int dig = 0; while (_number) { _number /= 10; dig++; } return dig; } int main() { cin >> _A >> _B; for (int i = _A; i <= _B; i++) { int dig = FindingDigit(i); _ResSet.clear(); for (int j = 1; j <= dig - 1; j++) { int number = i; int _t = pow(10, j); int remainder = number % _t; int frontpart = number / _t; int frontpartDig = FindingDigit(frontpart); _t = pow(10, frontpartDig); int res = frontpart + (remainder * _t); if (dig != FindingDigit(res)) continue; if (res > _B || res < _A || res <= number) continue; _ResSet.insert({ number, res }); } _Res += _ResSet.size(); } cout << _Res; return 0; }