some tasks
This commit is contained in:
+2
-1
@@ -1,3 +1,4 @@
|
|||||||
.vscode
|
.vscode
|
||||||
run
|
run
|
||||||
test
|
test
|
||||||
|
*.swp
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
// Напишите программу, которая выполняет RLE-кодирование стандартного потока ввода.
|
||||||
|
|
||||||
|
// При RLE (run length encoding) кодировании последовательность одинаковых идущих подряд символов заменяется на специальный маркер с длиной последовательности.
|
||||||
|
|
||||||
|
// Последовательности одинаковых символов длиной не более 4 остаются без изменений (кроме символа '#'). Последовательности одинаковых символов длиной более 4 заменяются на последовательность символов '#', CHAR, N, '#', где CHAR — это символ, N — число повторений, записываемое в текстовом виде в шестнадцатеричной системе счисления с цифрами 0-9 и a-f.
|
||||||
|
|
||||||
|
// Последовательность символов '#' любой длины кодируется всегда как описано выше.
|
||||||
|
|
||||||
|
// Использовать ввод-вывод языка Си++.
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::string s;
|
||||||
|
|
||||||
|
while (std::cin) {
|
||||||
|
std::string line;
|
||||||
|
std::getline(std::cin, line);
|
||||||
|
s += line + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
size_t iter1 = 0;
|
||||||
|
size_t iter2 = 0;
|
||||||
|
|
||||||
|
while (iter1 < s.size()) {
|
||||||
|
iter2 = iter1;
|
||||||
|
while (iter2 < s.size() && s[iter1] == s[iter2]) {
|
||||||
|
iter2++;
|
||||||
|
}
|
||||||
|
int count = iter2 - iter1;
|
||||||
|
|
||||||
|
if (count > 4) {
|
||||||
|
result += "#";
|
||||||
|
result += s[iter1];
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << std::hex << count;
|
||||||
|
std::string hexCount = ss.str();
|
||||||
|
|
||||||
|
result += hexCount;
|
||||||
|
result += "#";
|
||||||
|
} else if (s[iter1] == '#') {
|
||||||
|
result += "#";
|
||||||
|
result += s[iter1];
|
||||||
|
result += std::to_string(count);
|
||||||
|
result += "#";
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
result += s[iter1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
iter1 = iter2;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << result << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -1,23 +1,27 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
class BinaryNumber
|
class BinaryNumber
|
||||||
{
|
{
|
||||||
string str;
|
std::string str;
|
||||||
public:
|
public:
|
||||||
BinaryNumber(const string& s = "0") {
|
BinaryNumber(const std::string& s = "0") {
|
||||||
str = s;
|
str = s;
|
||||||
}
|
}
|
||||||
operator string () const {
|
|
||||||
|
operator std::string() const {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BinaryNumber& operator++() {
|
const BinaryNumber& operator++() {
|
||||||
std::string::iterator i = str.end() - 1;
|
auto i = --str.end();
|
||||||
|
|
||||||
while (*i == '1' && i != str.begin()) {
|
while (*i == '1' && i != str.begin()) {
|
||||||
*i = '0';
|
*i = '0';
|
||||||
--i;
|
--i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == str.begin()) {
|
if (i == str.begin()) {
|
||||||
|
*i = '0';
|
||||||
str.insert(str.begin(), '1');
|
str.insert(str.begin(), '1');
|
||||||
} else {
|
} else {
|
||||||
*i = '1';
|
*i = '1';
|
||||||
|
|||||||
+30
-13
@@ -1,22 +1,39 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdint>
|
|
||||||
|
|
||||||
void process(const std::vector<int>& mas1, std::vector<int>& mas2) {
|
void process(const std::vector<int>& v1, std::vector<int>& v2) {
|
||||||
std::set<int> set1(mas1.begin(), mas1.end());
|
std::vector<int> copy_v1(v1);
|
||||||
|
std::sort(copy_v1.begin(), copy_v1.end());
|
||||||
|
auto last = std::unique(copy_v1.begin(), copy_v1.end());
|
||||||
|
copy_v1.erase(last, copy_v1.end());
|
||||||
|
|
||||||
if (set1.empty() || mas2.empty()) {
|
auto iter = --v2.end();
|
||||||
return;
|
int num = (int)v2.size() - 1;
|
||||||
}
|
|
||||||
|
|
||||||
for (auto it = mas2.end() - 1; it != mas2.begin() - 1; --it) {
|
while (iter != --v2.begin()) {
|
||||||
int dst = it - mas2.begin();
|
if (std::binary_search(copy_v1.begin(), copy_v1.end(), num)) {
|
||||||
|
iter = v2.erase(iter);
|
||||||
if (std::find(set1.begin(), set1.end(), dst) != set1.end()) {
|
|
||||||
mas2.erase(it);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
num--;
|
||||||
|
iter--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #include <iostream>
|
||||||
|
// int main() {
|
||||||
|
// std::vector<int> v1 = { 0, 2, 4, 10, -6, 2, 2, 4 };
|
||||||
|
// std::vector<int> v2 = { 0, 2, 4, 10, -6, 2, 2, 4 };
|
||||||
|
|
||||||
|
// process(v1, v2);
|
||||||
|
|
||||||
|
// for (auto& i : v2) {
|
||||||
|
// std::cout << i << " ";
|
||||||
|
// }
|
||||||
|
// std::cout << std::endl;
|
||||||
|
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
#include <list>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::list<int> l;
|
||||||
|
|
||||||
|
int n;
|
||||||
|
std::cin >> n;
|
||||||
|
|
||||||
|
while (n != 0) {
|
||||||
|
l.push_back(n);
|
||||||
|
std::cin >> n;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (std::cin >> n) {
|
||||||
|
auto iter = l.begin();
|
||||||
|
|
||||||
|
if (n < 0) {
|
||||||
|
n = abs(++n);
|
||||||
|
if ((size_t)n >= l.size()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (n--) ++iter;
|
||||||
|
|
||||||
|
l.erase(iter);
|
||||||
|
} else {
|
||||||
|
int tmp;
|
||||||
|
std::cin >> tmp;
|
||||||
|
|
||||||
|
--n;
|
||||||
|
while (n-- && iter != l.end()) ++iter;
|
||||||
|
|
||||||
|
l.insert(iter, tmp);
|
||||||
|
|
||||||
|
// l.insert();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& i : l) {
|
||||||
|
std::cout << i << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user