arturocu81
BAN USER#include <iostream>
#include <string>
#include <algorithm>
std::string bsum(std::string str1, std::string str2) {
std::string result;
int acc = 0;
auto it1 = str1.rbegin();
auto it2 = str2.rbegin();
for (; it1 != str1.rend() && it2 != str2.rend(); it1++, it2++) {
if (*it1 == *it2) {
if (*it1 == '1') {
(acc == 0) ? result.push_back('0') : result.push_back('1');
acc = 1;
}
else {
(acc == 1) ? result.push_back('1') : result.push_back('0');
acc = 0;
}
}
else {
if (*it1 != *it2) {
if (acc == 1) {
result.push_back('0');
acc = 1;
}
else {
result.push_back('1');
acc = 0;
}
}
}
}
if (it1 != str1.rend()) {
while (it1 != str1.rend()) {
if (*it1 == '1') {
(acc == 0) ? result.push_back('1') : result.push_back('0');
}
else {
(acc == 0) ? result.push_back('0') : result.push_back('1');
acc = 0;
}
it1++;
}
}
else {
if (it2 != str2.rend()) {
while (it2 != str2.rend()) {
if (*it2 == '1') {
(acc == 0) ? result.push_back('1') : result.push_back('0');
}
else {
(acc == 0) ? result.push_back('0') : result.push_back('1');
acc = 0;
}
it2++;
}
}
}
if (acc) {
result.push_back('1');
}
std::reverse(result.begin(), result.end());
return result;
}
I will give two solutions:
One using O(n) extra space:
std::vector<int> next_int(std::vector<int> myvector) {
std::vector<int> result;
std::vector<int>::reverse_iterator rit = myvector.rbegin();
int sum = 0, acc = 1;
for (; rit!= myvector.rend(); ++rit) {
sum = *rit + acc;
if (sum == 10) {
result.push_back(0);
acc = 1;
} else {
result.push_back(sum);
acc = 0;
++rit;
break;
}
}
if (rit!= myvector.rend())
for (; rit!= myvector.rend(); ++rit) {
result.push_back(*rit);
} else {
if (acc)
result.push_back(acc);
}
std::reverse(result.begin(), result.end());
return result;
}
The next one, no extra space used:
void next_int(std::vector<int> &myvector) {
std::vector<int> result;
std::vector<int>::reverse_iterator rit = myvector.rbegin();
int sum = 0, acc = 1;
for (; rit!= myvector.rend(); ++rit) {
sum = *rit + acc;
if (sum == 10) {
*rit = 0;
acc = 1;
} else {
*rit = sum;
acc = 0;
++rit;
break;
}
}
if (rit== myvector.rend() && acc) {
auto it = myvector.begin();
myvector.insert ( it , acc );
}
}
#include <iostream>
#include <set>
#include <vector>
int main ()
{
std::set<int> myset;
std::set<int>::iterator it_up, it_low;
std::vector<std::pair<int,int>> freq;
std::pair<int, int> p1 = { 1, 4 };
std::pair<int, int> p2 = { 6, 8 };
std::pair<int, int> p3 = { 2, 4 };
std::pair<int, int> p4 = { 7, 9 };
std::pair<int, int> p5 = { 10, 15 };
freq.push_back(p1);
freq.push_back(p2);
freq.push_back(p3);
freq.push_back(p4);
freq.push_back(p5);
for (auto it = freq.begin(); it != freq.end(); it++) {
it_up = myset.upper_bound(it->first);
it_low = myset.lower_bound(it->first);
if (it_up == myset.end() || it_low == myset.begin()) {
myset.insert(it->first);
}
it_up = myset.upper_bound(it->second);
if (it_up == myset.end()) {
myset.insert(it->second);
it_low = myset.lower_bound(it->second);
auto nx = std::prev(it_low, 1);
if (*nx != it->first) {
myset.erase(nx);
}
}
}
int sum = 0;
auto it = myset.begin();
for (int i = 0; i < myset.size() - 1; i+=2) {
auto nx = std::next(it, 1);
sum += abs(*nx - *(it));
it = std::next(it, 2);
}
std::cout << sum << '\n';
return 0;
}
- arturocu81 October 12, 2020