Rezultati

Up. imeNalogaJezikRezultatČas oddaje
attempterji-2019 Biodiverziteta C++ 100/100OK 09. maj '19 @ 20:12

Test Točke Porabljen spomin Porabljen čas Status
#1 [več] 20/20 26,109 MiB 0,000 s OK
#2 [več] 20/20 47,848 MiB 0,000 s OK
#3 [več] 20/20 47,840 MiB 0,000 s OK
#4 [več] 20/20 47,691 MiB 0,000 s OK
#5 [več] 20/20 47,844 MiB 0,000 s OK

Ocenjevani program (biodiverziteta.cpp):
#include <iostream>
#include <vector>
#include <cstring>
#include <string>
#include <sstream>
#include <algorithm>
#include <map>
#include <fstream>
#include <utility>
using namespace std;

int main() {
	int n, m, q;
	string B, D;
	cin >> n >> m >> q;
	cin >> B;
	cin >> D;
	vector<map<char,int>> mapa(n + 1);
	mapa[0]['A'] = 0;
	mapa[0]['C'] = 0;
	mapa[0]['T'] = 0;
	mapa[0]['G'] = 0;
	//mapa[0][B[0]]++;
	for (int i = 0; i < n; ++i) {
		mapa[i + 1]['A'] = mapa[i]['A'];
		mapa[i + 1]['C'] = mapa[i]['C'];
		mapa[i + 1]['G'] = mapa[i]['G'];
		mapa[i + 1]['T'] = mapa[i]['T'];
		mapa[i + 1][B[i]]++;
	}

	vector<map<char, int>> mapa2(m + 1);
	mapa2[0]['A'] = 0;
	mapa2[0]['C'] = 0;
	mapa2[0]['T'] = 0;
	mapa2[0]['G'] = 0;
	//mapa[0][B[0]]++;
	for (int i = 0; i < m; ++i) {
		mapa2[i + 1]['A'] = mapa2[i]['A'];
		mapa2[i + 1]['C'] = mapa2[i]['C'];
		mapa2[i + 1]['G'] = mapa2[i]['G'];
		mapa2[i + 1]['T'] = mapa2[i]['T'];
		mapa2[i + 1][D[i]]++;
	}

	for (int i = 0; i < q; ++i) {
		int bzac, bkon, dzac, dkon;
		cin >> bzac >> bkon >> dzac >> dkon;
		//int rez = abs(mapa[bkon]['A'] - mapa2[dkon]['A']) + abs(mapa[bkon]['C'] - mapa2[dkon]['C']) + abs(mapa[bkon]['T'] - mapa2[dkon]['T']) + abs(mapa[bkon]['G']  - mapa2[dkon]['G']);
		//rez = abs(rez - abs(mapa[bzac - 1]['A'] - mapa2[dzac - 1]['A']) + abs(mapa[bzac - 1]['C'] - mapa2[dzac - 1]['C']) + abs(mapa[bzac - 1]['T'] - mapa2[dzac - 1]['T']) + abs(mapa[bzac - 1]['G'] - mapa2[dzac - 1]['G']));
		int rez = 0;
		rez += abs(mapa[bkon]['A'] - mapa[bzac - 1]['A'] - (mapa2[dkon]['A'] - mapa2[dzac - 1]['A']));
		rez += abs(mapa[bkon]['C'] - mapa[bzac - 1]['C'] - ( mapa2[dkon]['C'] - mapa2[dzac - 1]['C']));
		rez += abs(mapa[bkon]['T'] - mapa[bzac - 1]['T'] - ( mapa2[dkon]['T']  - mapa2[dzac - 1]['T']));
		rez += abs(mapa[bkon]['G'] - mapa[bzac - 1]['G'] - ( mapa2[dkon]['G'] - mapa2[dzac - 1]['G']));
		
		cout << rez << "\n";
	}



	/*
	int bzac, bkon, dzac, dkon;
	string bb, dd;





	for (int i = 0; i < q; ++i) {
		cin >> bzac >> bkon >> dzac >> dkon;
		bb = B.substr(bzac - 1, bkon - bzac + 1);
		dd = D.substr(dzac - 1, dkon - dzac + 1);
		int mini = min(bb.length(), dd.length());
		int sum;
		if (mini = bb.length()) {
			sum = mini + dd.length();
			for (int j = 0; j < bb.length(); ++j) {
				for (int k = 0; k < dd.length(); ++k)
					if (bb[j] == dd[k]) {
						dd.erase(k, 1);
						sum = sum - 2;
						break;
					}
			}
		}
		else {
			sum = mini + bb.length();
			for (int j = 0; j < dd.length(); ++j) {
				for (int k = 0; k < bb.length(); ++k)
					if (bb[k] == dd[j]) {
						bb.erase(k, 1);
						sum = sum - 2;
						break;
					}
			}
		}
		cout << sum << "\n";
	}
	*/
	return 0;
}