1
0
Fork 0
This commit is contained in:
Arthur K. 2025-05-29 19:24:43 +03:00
commit 810a9654a4
Signed by: wzray
GPG key ID: B97F30FDC4636357
50 changed files with 4450 additions and 0 deletions

11
1/A.cpp Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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;
}
}