Initial commit

This commit is contained in:
2022-06-01 20:14:50 +03:00
commit 8b9cce4739
1094 changed files with 68851 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
#include <iostream>
#include <fstream>
#include <deque>
#include <numeric>
using namespace std;
ifstream input_stream;
ofstream output_stream;
uint64_t dequeSum(deque<uint64_t> &d) {
return accumulate(d.begin(), d.end(), 0);
}
int main() {
input_stream.open("input.txt");
output_stream.open("output.txt");
uint16_t P, T, N;
input_stream >> P;
input_stream >> T;
input_stream >> N;
deque<uint64_t> bacteria;
bacteria.push_front(P);
uint16_t i;
uint64_t mature = 0;
// Populate list until death of first generation
for (i=1; i < T && i <= N; i++) {
// Reproduction
bacteria.push_front(mature);
// Maturity
mature += bacteria[1];
}
// Run loop considering death until experiment is complete
for(i; i <= N; i++) {
// Reproduction
bacteria.push_front(mature);
// Death
mature -= bacteria.back();
bacteria.pop_back();
// Maturity
mature += bacteria[1];
}
output_stream << dequeSum(bacteria) << endl;
input_stream.close();
output_stream.close();
return 0;
}

Binary file not shown.

View File

@@ -0,0 +1,152 @@
#include <iostream>
#include <fstream>
#include <set>
#include <algorithm>
#include <vector>
using namespace std;
ifstream input_stream;
ofstream output_stream;
int matchCode(string code1, string code2) {
int match = 0;
const int lim = min(code1.length(), code2.length());
for (int i = 0; i < lim; i++) {
if (code1[i] == code2[i]) {
match++;
}
}
return match;
}
void task1() {
uint16_t n;
input_stream >> n;
uint16_t m;
input_stream >> m;
uint16_t G;
input_stream >> G;
string monea_code;
input_stream >> monea_code;
int16_t best_match = -1;
vector<string> matches;
matches.reserve(m * n);
for (uint16_t y = 0; y < n; y++) {
for (uint16_t x = 0; x < m; x++) {
string cat_code;
input_stream >> cat_code;
uint8_t match = matchCode(monea_code, cat_code);
if (match > best_match && match > G) {
best_match = match;
matches.clear();
matches.push_back(to_string(y + 1) + " " + to_string(x + 1) + " " + cat_code);
} else if (match == best_match) {
matches.push_back(to_string(y + 1) + " " + to_string(x + 1) + " " + cat_code);
}
}
}
if (best_match > 0) {
output_stream << best_match << endl;
for (auto i = matches.begin(); i != matches.end(); i++) {
output_stream << *i << endl;
}
} else {
output_stream << "MONEA NU ARE RUDE" << endl;
}
}
void task2() {
uint16_t n;
input_stream >> n;
uint16_t m;
input_stream >> m;
uint16_t G;
input_stream >> G;
string monea_code;
input_stream >> monea_code;
bool town[n][m] = {};
for (uint16_t y = 0; y < n; y++) {
for (uint16_t x = 0; x < m; x++) {
string cat_code;
input_stream >> cat_code;
if (matchCode(monea_code, cat_code) > G) {
town[y][x] = true;
} else {
town[y][x] = false;
}
}
}
uint16_t sum[n][m] = {};
uint16_t max_of_s, max_i, max_j = 0;
for (uint16_t i = 0; i < n; i++) {
sum[i][m - 1] = town[i][m - 1];
}
for (uint16_t j = 0; j < m; j++) {
sum[n - 1][j] = town[n - 1][j];
}
for (int16_t i = n-2; i >= 0; i--) {
for (int16_t j = m-2; j >= 0; j--) {
if (town[i][j]) {
sum[i][j] = min(sum[i][j+1], min(sum[i+1][j], sum[i+1][j+1])) + 1;
if (sum[i][j] >= max_of_s) {
max_of_s = sum[i][j];
max_i = i;
max_j = j;
}
} else {
sum[i][j] = 0;
}
}
}
if (max_of_s > 0) {
output_stream << (max_i + 1) << " " << (max_j + 1) << " " << max_of_s << endl;
} else {
output_stream << "MONEA NU ARE RUDE" << endl;
}
}
int main() {
input_stream.open("input.txt");
output_stream.open("output.txt");
char task;
input_stream >> task;
if (task == '1') {
task1();
} else {
task2();
}
input_stream.close();
output_stream.close();
return 0;
}