add: 230510-CN
This commit is contained in:
parent
2c85f9fc4b
commit
44c80466fa
|
|
@ -0,0 +1,30 @@
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1015. Smallest Integer Divisible by K
|
||||||
|
*
|
||||||
|
* Given a positive integer k, you need to find the length of the smallest positive integer n such that n is divisible by k, and n only contains the digit 1.
|
||||||
|
* Return the length of n. If there is no such n, return -1.
|
||||||
|
* Note: n may not fit in a 64-bit signed integer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class LC230510CN {
|
||||||
|
public:
|
||||||
|
static int smallestRepunitDivByK(int k) noexcept;
|
||||||
|
};
|
||||||
|
|
||||||
|
int LC230510CN::smallestRepunitDivByK(int k) noexcept {
|
||||||
|
using ULL = unsigned long long;
|
||||||
|
int sum = 0;
|
||||||
|
std::unordered_set<ULL> vis;
|
||||||
|
ULL key;
|
||||||
|
for (int j = 1, c = 1;; (j = (j * 10) % k), ++c) {
|
||||||
|
sum = (sum + j) % k;
|
||||||
|
if (sum == 0)
|
||||||
|
return c;
|
||||||
|
key = (ULL(sum) << 32) + j;
|
||||||
|
if (vis.contains(key))
|
||||||
|
return -1;
|
||||||
|
vis.insert(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -108,4 +108,9 @@ public:
|
||||||
static std::vector<int> spiralOrder(const std::vector<std::vector<int>>&) noexcept;
|
static std::vector<int> spiralOrder(const std::vector<std::vector<int>>&) noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class LC230510CN {
|
||||||
|
public:
|
||||||
|
static constexpr inline int smallestRepunitDivByK(int k) noexcept;
|
||||||
|
};
|
||||||
|
|
||||||
#endif //LEETCODE_CPP_DEFS_H
|
#endif //LEETCODE_CPP_DEFS_H
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
|
#include <cstdio>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
#include <unordered_set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
|
|
@ -12,11 +14,27 @@ std::ostream& operator<<(std::ostream& os, const std::vector<T>& x) noexcept {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
std::cout << LC230509::spiralOrder({
|
using ULL = unsigned long long;
|
||||||
{2,3,4},
|
int ok = 0, not_ok = 0;
|
||||||
{5,6,7},
|
for (int i : {99, 101, 9999}) {
|
||||||
{8,9,10},
|
int sum = 0;
|
||||||
{11,12,13}
|
std::unordered_set<ULL> vis;
|
||||||
});
|
for (int j = 1, c = 1;; (j = (j * 10) % i), ++c) {
|
||||||
|
sum = (sum + j) % i;
|
||||||
|
if (sum == 0) {
|
||||||
|
std::printf("%6d -> %d\n", i, c);
|
||||||
|
++ok;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
auto key = (ULL(sum) << 32) + j;
|
||||||
|
if (vis.contains(key)) {
|
||||||
|
std::printf("%6d -> CANNOT\n", i);
|
||||||
|
++not_ok;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
vis.insert(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::printf("[OK] %d | [FAIL] %d\n", ok, not_ok);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue