Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Приношу свои извинения за плохо оформленный код.
- // Он был написан впопыхах в некомфортных условиях...
- // Да еще и руками из жопы растущими.
- #define _CRT_SECURE_NO_DEPRECATE
- #define _USE_MATH_DEFINES
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <cstdlib>
- #include <vector>
- #include <map>
- #include <set>
- #include <sstream>
- #include <cstring>
- #include <string>
- #include <queue>
- #pragma comment(linker, "/STACK:64000000")
- using namespace std;
- typedef long long int64;
- typedef pair<int,int> pii;
- typedef pair<int,double> pid;
- typedef pair<double, double> pdd;
- typedef pair<int,pii> piii;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef vector<pii> vpii;
- typedef vector<vpii> vvpii;
- #define xn _dsfhsdfsj
- #define yn _dthsdfshj
- #define problem "c"
- int64 d;
- int n;
- int64 a[1 << 20];
- int c[1 << 20][3];
- int64 cur;
- int64 cnt1[1 << 7][1 << 7];
- int64 cnt2[1 << 7][1 << 7][1 << 7];
- int64 mods[1 << 7];
- vi b;
- int was[1 << 7];
- void rec(int x)
- {
- if (x == 3)
- {
- int cm = (int)(cur % d);
- for (int i = 0; i < 3; ++i)
- {
- ++cnt1[cm][b[i]];
- for (int j = 0; j < 3; ++j)
- {
- if (i == j) continue;
- ++cnt2[cm][b[i]][b[j]];
- }
- c[n][i] = b[i];
- }
- a[n++] = cur;
- return;
- }
- int64 tcur = cur;
- for (int i = 10; i < 100; ++i)
- {
- if (was[i]) continue;
- was[i] = 1;
- b.push_back(i);
- cur = tcur * 100 + i;
- rec(x + 1);
- was[i] = 0;
- b.pop_back();
- }
- cur = tcur;
- }
- inline int64 getCnt(int x, int y, int z, int m)
- {
- int a[3];
- a[0] = x;
- a[1] = y;
- a[2] = z;
- int64 res = 0;
- sort(a, a + 3);
- do
- {
- int64 cur = a[0] * 10000 + a[1] * 100 + a[2];
- if (cur % d == m) ++res;
- } while (next_permutation(a, a + 3));
- return res;
- }
- int main()
- {
- freopen(problem ".in", "r", stdin); freopen(problem ".out", "w", stdout);
- memset(cnt1, 0, sizeof cnt1);
- memset(cnt2, 0, sizeof cnt2);
- cin >> d;
- memset(was, 0, sizeof was);
- cur = 0;
- n = 0;
- rec(0);
- memset(mods, 0, sizeof mods);
- for (int i = 0; i < n; ++i)
- {
- int64 x = a[i] % d;
- ++mods[x];
- }
- int64 res = 0;
- for (int i = 0; i < n; ++i)
- {
- int64 x = (a[i] * 1000000LL) % d;
- int y = (int)((d - x) % d);
- int64 cur = mods[y];
- cur -= cnt1[y][c[i][0]];
- cur -= cnt1[y][c[i][1]];
- cur -= cnt1[y][c[i][2]];
- cur += cnt2[y][c[i][0]][c[i][1]];
- cur += cnt2[y][c[i][0]][c[i][2]];
- cur += cnt2[y][c[i][1]][c[i][2]];
- cur -= getCnt(c[i][0], c[i][1], c[i][2], y);
- res += cur;
- }
- cout << res << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement