ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#199794 | #2989. 优美数 | tkswls | 100 | 5766ms | 19100kb | C++11 | 2.9kb | 2023-12-21 11:01:47 | 2023-12-21 12:03:30 |
answer
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define ll __int128
#define int __int128
using namespace std;
ll n, ans, p, b[1000006], ccnt, c[1000006], t, a[30], jie[30], m, sum, op;
map<ll, ll> ma;
vector<pair<ll, ll>> v[30];
string s;
inline ll read() {
ll x = 0, t = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')
t = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * t;
}
inline void write(ll x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
signed main() {
jie[0] = 1;
for (int i = 1; i <= 21; i++) {
jie[i] = jie[i - 1] * i;
}
p = 1;
for (int i = 1; i <= 9; i++) {
v[1].push_back(make_pair(i, 1));
}
for (int i = 1; i <= 20; i++) {
ma.clear();
for (int j = 1; j <= ccnt; j++) b[j] = 0;
ccnt = 0;
for (int j = 0; j < v[i].size(); j++) {
for (int k = 0; k <= 9; k++) {
if (!ma[v[i][j].first * k]) ma[v[i][j].first * k] = ++ccnt, c[ccnt] = v[i][j].first * k;
b[ma[v[i][j].first * k]] += v[i][j].second;
}
}
for (int j = 1; j <= ccnt; j++) {
v[i + 1].push_back(make_pair(c[j], b[j]));
}
sort(v[i + 1].begin(), v[i + 1].end());
}
for (int i = 1; i <= 21; i++) {
for (int j = v[i].size() - 2; j >= 0; j--) {
v[i][j].second += v[i][j + 1].second;
// if (i == 4) {
// write(v[i][j].first);
// cout << ' ';
// write(v[i][j].second);
// cout << "||";
// }
}
// cout << '\n';
}
t = read();
v[0].push_back(make_pair(1, 1));
// cout << "|";
// write(t);
// cout << "|";
while (t--) {
sum = 1;
cin >> s;
if (s.size() > 21) {
for (int i = 1; i <= 21; i++) {
a[i] = 9;
sum *= 9;
}
m = 21;
} else {
for (int i = s.size(); i >= 1; i--) {
a[i] = s[s.size() - i] - '0';
// write(a[i]);
sum *= s[s.size() - i] - '0';
}
m = s.size();
}
ans = 0;
for (int i = 1; i < m; i++) {
ans += v[i][lower_bound(v[i].begin(), v[i].end(), make_pair(jie[i], (ll) - 1)) - v[i].begin()].second;
}
ll cnt = 1;
for (int i = m; i >= 1; i--) {
// write(a[i]);
// cout << ' ';
for (int j = 1; j < a[i]; j++) {
// write(v[i - 1][lower_bound(v[i - 1].begin(), v[i - 1].end(), make_pair((jie[m] - 1) / (cnt * j) + 1, (ll) - 1)) - v[i - 1].begin()].second);
// cout << "|";
// write(lower_bound(v[i - 1].begin(), v[i - 1].end(), make_pair((jie[m] - 1) / (cnt * j) + 1, (ll) - 1)) - v[i - 1].begin());
// cout << "**";
// write((jie[m] - 1) / (cnt * j) + 1);
// cout << "%%";
op = lower_bound(v[i - 1].begin(), v[i - 1].end(), make_pair((jie[m] - 1) / (cnt * j) + 1, (ll) - 1)) - v[i - 1].begin();
if (op < v[i - 1].size()) {
ans += v[i - 1][op].second;
}
}
cnt *= a[i];
if (!cnt) break;
}
if (sum >= jie[m]) ans++;
write(ans);
cout << "\n";
}
}
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 477ms
memory: 19096kb
input:
10000 47837 518455 655112 954345 600612 439802 420101 521472 537870 564701 532021 80484 18346 373734...
output:
28521 255105 331170 498198 305480 214091 203166 256272 266189 282501 262266 49149 10929 181859 39705...
result:
ok 10000 numbers
Test #2:
score: 10
Accepted
time: 698ms
memory: 19096kb
input:
10000 4058707 38032 2504347 7593417 4041877 8727030 1346770 7742834 7692976 554753 2279696 5140166 2...
output:
1576280 22467 940084 3142681 1576280 3683468 565983 3220642 3197318 276248 852824 2010866 931280 344...
result:
ok 10000 numbers
Test #3:
score: 10
Accepted
time: 642ms
memory: 19092kb
input:
10000 980475503196470826 409488057248738093 964119271402833647 578964283299264159 142509873610207494...
output:
2071241664423 1970523647942 2056479141675 1974294607826 1969798331582 1603540352679 1971880091330 19...
result:
ok 10000 numbers
Test #4:
score: 10
Accepted
time: 532ms
memory: 19096kb
input:
10000 810356108140771788 300489122283682456 762404595750439923 480865512993981847 550163957708337313...
output:
2015446574701 1969871629532 1993921074841 1971184218783 1973110540433 2052181582591 1987832109612 19...
result:
ok 10000 numbers
Test #5:
score: 10
Accepted
time: 472ms
memory: 19096kb
input:
3 8212662212468102540154365 19445655726298305109 97190067946627003
output:
2121793450243 2121511412240 1861031606514
result:
ok 3 number(s): "2121793450243 2121511412240 1861031606514"
Test #6:
score: 10
Accepted
time: 565ms
memory: 19096kb
input:
3 6483332648160372 3892040543298291125323 40247259935
output:
1031619953982 2121793450243 2613238047
result:
ok 3 number(s): "1031619953982 2121793450243 2613238047"
Test #7:
score: 10
Accepted
time: 733ms
memory: 19096kb
input:
200 282198 9455423614089 560151079866656 8058866664071192 18431809 622570433460150897110199 53873023...
output:
136630 122292625535 484191134993 1216741215387 5645680 2121793450243 58672426490 336568368 212179345...
result:
ok 200 numbers
Test #8:
score: 10
Accepted
time: 509ms
memory: 19096kb
input:
200 248212546060755377765 2951478667201 5087 9147186474579 918 7 65639 931533331045710461 8192108437...
output:
2121793167295 41565106450 3505 119237514903 729 7 39570 2052221635237 682457002854 6279 212169718855...
result:
ok 200 numbers
Test #9:
score: 10
Accepted
time: 524ms
memory: 19100kb
input:
10000 6112878206338759544 30104707437906067469 99979487336233526005 55863650164083552054 87604483409...
output:
2107155938386 2121511412241 2121744195978 2121511594073 2121552264516 2121511420735 2121511412240 21...
result:
ok 10000 numbers
Test #10:
score: 10
Accepted
time: 614ms
memory: 19092kb
input:
10000 64229512433483029478 3662181692760349362 12485423318924806225 34778296778156581266 31579270837...
output:
2121513598993 2106700807499 2121511412240 2121511412241 2106700763074 2121627144876 2106712293588 21...
result:
ok 10000 numbers
Extra Test:
score: 0
Extra Test Passed