add: 221031-CN

This commit is contained in:
Eatswap 2022-10-31 00:58:29 +08:00
parent c2eb3ea45f
commit 09ed316e00
Signed by: Eatswap
GPG Key ID: BE661106A1F3FA0B
2 changed files with 48 additions and 1 deletions

47
cpp/2210/221031-CN.cpp Normal file
View File

@ -0,0 +1,47 @@
#include <bitset>
#include <iostream>
/**
* 481. Magical String
*
* A magical string s consists of only '1' and '2' and obeys the following rules:
* - The string s is magical because concatenating the number of contiguous occurrences of characters '1' and '2' generates the string s itself.
* The first few elements of s is s = "1221121221221121122……". If we group the consecutive 1's and 2's in s, it will be "1 22 11 2 1 22 1 22 11 2 11 22 ......" and the occurrences of 1's or 2's in each group are "1 2 2 1 1 2 1 2 2 1 2 2 ......". You can see that the occurrence sequence is s itself.
* Given an integer n, return the number of 1's in the first n number in the magical string s.
*/
class Solution {
public:
static constexpr int magicalString(int n) {
if (n <= 3) return 1;
std::bitset<100000> s;
int i = 2, c[2] = {1, 2};
s[1] = s[2] = true;
for (; c[0] + c[1] < n; ++i) {
s[c[i & 1]++ + c[i & 1 ^ 1]] = i & 1;
if (s[i])
s[c[i & 1]++ + c[i & 1 ^ 1]] = i & 1;
}
return c[0] + (!(i & 1) ? 0 : (n - c[0] - c[1]));
}
};
int main() {
std::cout << Solution::magicalString(4) << "\n";
std::cout << Solution::magicalString(5) << "\n";
std::cout << Solution::magicalString(6) << "\n";
std::cout << Solution::magicalString(7) << "\n";
std::cout << Solution::magicalString(8) << "\n";
std::cout << Solution::magicalString(9) << "\n";
std::cout << Solution::magicalString(10) << "\n";
std::cout << Solution::magicalString(11) << "\n";
std::cout << Solution::magicalString(12) << "\n";
std::cout << Solution::magicalString(13) << "\n";
std::cout << Solution::magicalString(14) << "\n";
std::cout << Solution::magicalString(15) << "\n";
std::cout << Solution::magicalString(16) << "\n";
std::cout << Solution::magicalString(17) << "\n";
std::cout << Solution::magicalString(18) << "\n";
std::cout << Solution::magicalString(19) << "\n";
return 0;
}

View File

@ -3,4 +3,4 @@ PROJECT(2210)
SET(CMAKE_CXX_STANDARD 23)
ADD_EXECUTABLE(2210 221030.cpp)
ADD_EXECUTABLE(2210 221031-CN.cpp)