結果
| 問題 |
No.3156 Count That Day's N
|
| コンテスト | |
| ユーザー |
橋本ヒデヒコ
|
| 提出日時 | 2025-07-08 17:19:16 |
| 言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 78 ms / 3,000 ms |
| コード長 | 2,076 bytes |
| コンパイル時間 | 1,322 ms |
| コンパイル使用メモリ | 147,648 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2025-07-08 17:19:20 |
| 合計ジャッジ時間 | 3,407 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
ソースコード
#include <iostream>
#include <iomanip>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <algorithm>
#include <cmath>
#include <iterator>
using namespace std;
using i64 = int64_t;
template<class T>
using VV = vector<vector<T>>;
#define REP(i, n) for(i64 i = 0; i < i64(n); i++)
#define REP1(i, n) for(i64 i = 1; i <= i64(n); i++)
i64 INF = 100100100100100L;
i64 direct[8][2] = {
{1, 0}, {0, -1}, {-1, 0}, {0, 1},
{1, -1}, {-1, -1}, {-1, 1}, {1, 1}
};
template<class T, class S>
ostream &operator<<(ostream &os, pair<T, S> p);
template<class T>
ostream &operator<<(ostream &os, const vector<T> &v)
{
for(i64 i = 0; i < i64(v.size()); i++) {
if (i > 0) os << ' ';
os << v[i];
}
return os;
}
template<class T>
ostream &operator<<(ostream &os, const set<T> &st)
{
bool first = true;
for(const T &it: st)
if (first) {
first = false;
os << it;
} else{
os << ' ' << it;
}
return os;
}
template<class T, class S>
ostream &operator<<(ostream &os, map<T, S> &mp)
{
bool first = true;
for(const auto &[f, l]: mp)
if (first) {
first = false;
os << '{' << f << "-> " << l << '}';
} else{
os << ", {" << f << "-> " << l << '}';
}
return os;
}
template<class T, class S>
ostream &operator<<(ostream &os, pair<T, S> p)
{
os << '{' << p.first << ", " << p.second << '}';
return os;
}
int main()
{
i64 K, N;
cin >> K >> N;
set<i64> ans;
for(i64 x = 1; x < 1'000; x++) {
i64 x6 = x * x * x * x * x * x;
if (x6 > N)
break;
for(i64 y = 1; x6 + y * y * y * y <= N; y++) {
i64 num = x6 + y * y * y * y;
if (num % K != 0)
continue;
num /= K;
i64 ok = 0;
i64 ng = min(num + 1, i64(100'000'010));
while (ng - ok > 1) {
i64 mid = (ng + ok) / 2;
if (mid * mid <= num)
ok = mid;
else
ng = mid;
}
if (ok * ok == num) {
ans.insert(K * ok * ok);
// printf("x: %lld, y: %lld, z: %lld\n", x, y, ok);
}
}
}
cout << ans.size() << endl;
return 0;
}
橋本ヒデヒコ