upload
This commit is contained in:
commit
810a9654a4
50 changed files with 4450 additions and 0 deletions
11
1/A.cpp
Normal file
11
1/A.cpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include <iostream>
|
||||
|
||||
int main( void ) {
|
||||
long x;
|
||||
long y;
|
||||
|
||||
std::cin >> x >> y;
|
||||
std::cout << x + y;
|
||||
|
||||
return 0;
|
||||
}
|
37
1/B.cpp
Normal file
37
1/B.cpp
Normal file
|
@ -0,0 +1,37 @@
|
|||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
int main() {
|
||||
int length;
|
||||
int offset;
|
||||
std::cin >> length >> offset;
|
||||
|
||||
if (offset > 0)
|
||||
offset %= length;
|
||||
else if (offset < 0)
|
||||
offset = -((-offset) % length);
|
||||
|
||||
int* numbers = new int[length];
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
std::cin >> numbers[i];
|
||||
}
|
||||
|
||||
if (offset < 0) {
|
||||
for (int a = 0; a > offset; --a) {
|
||||
for (int j = 1; j < length; ++j) {
|
||||
std::swap(numbers[j], numbers[j - 1]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int a = 0; a < offset; ++a) {
|
||||
for (int j = length - 1; j > 0; --j) {
|
||||
std::swap(numbers[j], numbers[j - 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < length; i++) {
|
||||
std::cout << numbers[i] << " ";
|
||||
}
|
||||
}
|
||||
|
15
1/C.cpp
Normal file
15
1/C.cpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
#include <iostream>
|
||||
#include <cmath>
|
||||
|
||||
int get_mcd(int a, int b) {
|
||||
if (b == 0)
|
||||
return a;
|
||||
return get_mcd(b, a % b);
|
||||
}
|
||||
|
||||
int main() {
|
||||
int a, b;
|
||||
std::cin >> a >> b;
|
||||
std::cout << get_mcd(a, b);
|
||||
return 0;
|
||||
}
|
33
1/D.cpp
Normal file
33
1/D.cpp
Normal file
|
@ -0,0 +1,33 @@
|
|||
#include <iostream>
|
||||
|
||||
|
||||
int main() {
|
||||
int n, m, q, counter = 0;
|
||||
std::cin >> n >> m >> q;
|
||||
bool** episodes = new bool* [n];
|
||||
for (int i = 0; i < n; ++i) {
|
||||
episodes[i] = new bool[m];
|
||||
}
|
||||
|
||||
for (int i = 0; i < q; ++i) {
|
||||
int e, s;
|
||||
std::cin >> e >> s;
|
||||
|
||||
if (!episodes[s - 1][e - 1]) {
|
||||
episodes[s - 1][e - 1] = true;
|
||||
++counter;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << n*m - counter << "\n";
|
||||
|
||||
for (int s = 0; s < n; ++s) {
|
||||
for (int e = 0; e < m; ++e) {
|
||||
if (!episodes[s][e]) {
|
||||
std::cout << e + 1 << " " << s + 1 << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
delete[] episodes;
|
||||
return 0;
|
||||
}
|
36
1/E.cpp
Normal file
36
1/E.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int size, offset_l = 0, offset_r = 0, counter = 0;
|
||||
|
||||
std::cin >> size;
|
||||
|
||||
char *word = new char[size];
|
||||
for (int i = 0; i < size; ++i)
|
||||
std::cin >> word[i];
|
||||
|
||||
if (size == 3) {
|
||||
if (word[0] == word[1] || word[1] == word[2] || word[0] == word[2])
|
||||
std::cout << "YES";
|
||||
else
|
||||
std::cout << "NO";
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < (size / 2) + (size % 2) - counter; ++i) {
|
||||
if (word[i + offset_l] != word[size - i - offset_r - 1]) {
|
||||
++counter;
|
||||
if (word[i + offset_l + 1] == word[size - i - offset_r - 1])
|
||||
++offset_l;
|
||||
else
|
||||
++offset_r;
|
||||
}
|
||||
}
|
||||
delete[] word;
|
||||
|
||||
if (counter < 2)
|
||||
std::cout << "YES";
|
||||
else
|
||||
std::cout << "NO";
|
||||
return 0;
|
||||
}
|
34
1/F.cpp
Normal file
34
1/F.cpp
Normal file
|
@ -0,0 +1,34 @@
|
|||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int n;
|
||||
std::cin >> n;
|
||||
|
||||
int *days = new int[n];
|
||||
int *sums_lr = new int[n];
|
||||
int *sums_rl = new int[n];
|
||||
|
||||
for (int i = 0; i < n; ++i) {
|
||||
std::cin >> days[i];
|
||||
sums_lr[i] = 0;
|
||||
sums_rl[i] = 0;
|
||||
}
|
||||
|
||||
for (int i = 1; i < n; ++i) {
|
||||
sums_lr[i] = sums_lr[i-1] + days[i-1];
|
||||
}
|
||||
|
||||
for (int i = n-2; i > -1; --i) {
|
||||
sums_rl[i] = sums_rl[i+1] + days[i+1];
|
||||
}
|
||||
|
||||
for (int i = 0; i < n; ++i) {
|
||||
if (sums_rl[i] == sums_lr[i]) {
|
||||
std::cout << i;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << -1;
|
||||
return 0;
|
||||
}
|
39
1/H.cpp
Normal file
39
1/H.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
int n;
|
||||
|
||||
std::cin >> n;
|
||||
|
||||
int min_blocks = n;
|
||||
int* a = new int[n];
|
||||
|
||||
for (long i = 0; i < n; i++) {
|
||||
std::cin >> a[i];
|
||||
}
|
||||
|
||||
for (long start = 0; start < 32; ++start) {
|
||||
bool *is_border = new bool[n]();
|
||||
long cx = a[start];
|
||||
int i = start;
|
||||
int border_count = 0;
|
||||
|
||||
while (!is_border[i % n]) {
|
||||
if ((cx & a[(i + 1) % n]) == 0) {
|
||||
cx |= a[(i + 1) % n];
|
||||
} else {
|
||||
cx = a[(i + 1) % n];
|
||||
is_border[i % n] = true;
|
||||
++border_count;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
min_blocks = std::min(min_blocks, border_count);
|
||||
|
||||
delete[] is_border;
|
||||
}
|
||||
std::cout << min_blocks;
|
||||
delete[] a;
|
||||
return 0;
|
||||
}
|
41
1/H_2.cpp
Normal file
41
1/H_2.cpp
Normal file
|
@ -0,0 +1,41 @@
|
|||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
long n, j, cnt = 9999999999, tmpcnt = 0, i;
|
||||
cin >> n;
|
||||
int* a = new int[n];
|
||||
int* is_border = new int[n];
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
cin >> a[i];
|
||||
is_border[i] = 0;
|
||||
}
|
||||
|
||||
for (j = 0; j < 31; j++)
|
||||
{
|
||||
int cx = a[j];
|
||||
i = j;
|
||||
|
||||
for (int m = 0; m < n; m++) {
|
||||
is_border[m] = 0;
|
||||
}
|
||||
|
||||
while (is_border[i % n] == 0) {
|
||||
if ((cx & a[(i + 1) % n]) == 0) {
|
||||
cx = cx | a[(i + 1) % n];
|
||||
}
|
||||
else {
|
||||
cx = a[(i + 1) % n];
|
||||
is_border[i % n] = 1;
|
||||
tmpcnt++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
cnt = min(cnt, tmpcnt);
|
||||
tmpcnt = 0;
|
||||
}
|
||||
cout << cnt;
|
||||
}
|
87
1/I.cpp
Normal file
87
1/I.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
#include <iostream>
|
||||
|
||||
int FindNearestNeighbor(unsigned long long number, unsigned long long& power_first, unsigned long long& power_third) {
|
||||
if (number < 5) {
|
||||
power_first = 1;
|
||||
power_third = 1;
|
||||
return 3;
|
||||
}
|
||||
int binary_number[60];
|
||||
int size = 0;
|
||||
bool second_half = false;
|
||||
|
||||
while (number != 0) {
|
||||
binary_number[size] = number % 2ULL;
|
||||
number /= 2;
|
||||
++size;
|
||||
}
|
||||
|
||||
for (int i = size - 1; i >= 0; --i) {
|
||||
if (binary_number[i] == 1 && !second_half) {
|
||||
if (power_first - 2 > size)
|
||||
++power_first;
|
||||
} else if (binary_number[i] == 0) {
|
||||
second_half = true;
|
||||
} else if (binary_number[i] == 1 && second_half) {
|
||||
power_third = i + 1;
|
||||
return size;
|
||||
}
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
void PrintBinaryNumber(long long number) {
|
||||
int binary_number[60];
|
||||
int size = 0;
|
||||
|
||||
while (number != 0) {
|
||||
binary_number[size] = number % 2ULL;
|
||||
number /= 2;
|
||||
++size;
|
||||
}
|
||||
|
||||
for (int i = size - 1; i >= 0; --i) {
|
||||
std::cout << binary_number[i];
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
// unsigned long long start, stop;
|
||||
// std::cin >> start >> stop;
|
||||
unsigned long long start = 1, stop = 100000000000000000;
|
||||
unsigned long long counter = 0;
|
||||
unsigned long long power_first = 0;
|
||||
unsigned long long power_third = 0;
|
||||
unsigned long long number = 0;
|
||||
|
||||
int size = FindNearestNeighbor(start, power_first, power_third);
|
||||
|
||||
while (true) {
|
||||
number = (1ULL << size) - (1ULL << (size - power_first)) + (1ULL << (power_third)) - 1;
|
||||
|
||||
if (number >= start && number <= stop) {
|
||||
PrintBinaryNumber(number);
|
||||
std::cout << " " << number << " " << power_first << " " << power_third << " " << size << std::endl;
|
||||
++counter;
|
||||
}
|
||||
if (number > stop) {
|
||||
std::cout << counter;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
++power_third;
|
||||
|
||||
if (power_third > size - power_first - 1) {
|
||||
++power_first;
|
||||
power_third = 1;
|
||||
}
|
||||
|
||||
if (power_first >= size - power_third) {
|
||||
++size;
|
||||
power_first = 1;
|
||||
power_third = 1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
76
1/I.py
Normal file
76
1/I.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
def solution(start, stop, debug=False):
|
||||
one = 0
|
||||
zero = 0
|
||||
length = len(bin(start)) - 2
|
||||
|
||||
if len(bin(stop)) - 2 == 1 or len(bin(stop)) - 2 == 2:
|
||||
return 0
|
||||
|
||||
for i in bin(start)[2:]:
|
||||
if i == '1' and zero == 0:
|
||||
one += 1
|
||||
elif i == '0':
|
||||
zero += 1
|
||||
else:
|
||||
break
|
||||
|
||||
# first iteration
|
||||
number = '1' * one + '0' * zero + '1' * (length - one - zero)
|
||||
counter = 0
|
||||
if int(number, 2) == stop:
|
||||
return 1
|
||||
elif int(number, 2) < stop:
|
||||
if len(number) > 3:
|
||||
counter += 1
|
||||
if debug:
|
||||
print(number, int(number, 2))
|
||||
else:
|
||||
return 0
|
||||
|
||||
while int(number, 2) < stop:
|
||||
zero -= 1
|
||||
if zero == 0:
|
||||
one += 1
|
||||
zero = length - one - 1
|
||||
if one >= length - 1:
|
||||
length += 1
|
||||
one = 1
|
||||
zero = length - one - 1
|
||||
number = '1' * one + '0' * zero + '1' * (length - one - zero)
|
||||
if len(number) < 3:
|
||||
continue
|
||||
|
||||
if number.split('0')[0] != number:
|
||||
if debug:
|
||||
print(number, int(number, 2))
|
||||
counter += 1
|
||||
|
||||
if int(number, 2) > stop:
|
||||
counter -= 1
|
||||
|
||||
return counter
|
||||
|
||||
|
||||
def test():
|
||||
input_data: list[tuple[int, int]] = [
|
||||
# (259, 263),
|
||||
# (259, 264),
|
||||
# (16384, 65536),
|
||||
# (16385, 16385),
|
||||
# (16385, 16386),
|
||||
# (259, 16387),
|
||||
(1, 10000000000)
|
||||
# (1, 16)
|
||||
]
|
||||
|
||||
for data in input_data:
|
||||
print(solution(*data, debug=True))
|
||||
|
||||
|
||||
def main():
|
||||
start, stop = map(int, input().split())
|
||||
print(solution(start, stop))
|
||||
|
||||
|
||||
test()
|
||||
|
66
1/I_2.cpp
Normal file
66
1/I_2.cpp
Normal file
|
@ -0,0 +1,66 @@
|
|||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int FindClosestNeighbor(int number, int &power_first, int &power_third) {
|
||||
int binary_number[60];
|
||||
int size = 0;
|
||||
bool second_half = false;
|
||||
|
||||
while (number != 0) {
|
||||
binary_number[size] = number % 2;
|
||||
number /= 2;
|
||||
++size;
|
||||
}
|
||||
|
||||
for (int i = size - 1; i >= 0; --i) {
|
||||
if (binary_number[i] == 1 && !second_half) {
|
||||
++power_first;
|
||||
} else if (binary_number[i] == 0) {
|
||||
second_half = true;
|
||||
} else if (binary_number[i] == 1 && second_half) {
|
||||
power_third = i + 1;
|
||||
return size;
|
||||
}
|
||||
++power_third;
|
||||
if (power_first + power_third = size) {
|
||||
--power_first;
|
||||
power_third = size - power_first - 1;
|
||||
}
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
int main() {
|
||||
// long long start, stop;
|
||||
// cin >> start >> stop;
|
||||
int start = 32766, stop = 32775;
|
||||
int counter = 0;
|
||||
|
||||
int power_first = 0;
|
||||
int power_third = 0;
|
||||
long long number = 0;
|
||||
|
||||
int size = FindClosestNeighbor(start, power_first, power_third);
|
||||
|
||||
while (true) {
|
||||
number = (1 << size) - (1 << (size - power_first)) + (1 << (power_third)) - 1;
|
||||
++power_third;
|
||||
|
||||
if (power_third >= size - power_first) {
|
||||
++power_first;
|
||||
power_third = 1;
|
||||
}
|
||||
|
||||
if (size - power_first <= 1) {
|
||||
++size;
|
||||
power_first = 1;
|
||||
power_third = 1;
|
||||
}
|
||||
|
||||
if (number > stop) {
|
||||
return 0;
|
||||
}
|
||||
std::cout << number << std::endl;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue