Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle
 Problema mare cu parintii= nervi ...

switch microtik

Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...
 Crapaturi placa

cum imi accesez dosarul electroni...

Momentul Aprilie 1964

Sursa noua - zgomot ?
 A fost lansat Ubuntu 24.04 LTS

Pareri apartament in zona Berceni?

Free streaming SkyShowtime de la ...

Skoda Fabia 1.0 TSI (110 CP)- 19 ...
 

[TEMA] Problema de backtracking - Virgule

- - - - -
  • Please log in to reply
No replies to this topic

#1
razvanw0w

razvanw0w

    New Member

  • Grup: Members
  • Posts: 22
  • Înscris: 16.05.2014
Salutare! De ieri ma confrunt cu o problema de backtracking, si anume problema http://www.pbinfo.ro...robleme&id=1502
Am observat ca rezolv cerinta problemei, dar ratez conditiile de optim (in cazul in care exista mai multe posibilitati in care ultimul numar format e minim). Sunt foarte confuz si as vrea sa imi oferiti niste indicatii in rezolvarea problemei. Mai jos este codul meu, va multumesc.

#include <bits/stdc++.h>
using namespace std;
ifstream fin("virgule.in");
ofstream fout("virgule.out");
const int DEBUG = 0;
string initial;
long long lastMin = LLONG_MAX;
int n;
vector<int> ans, finalAns;
inline void debug() {
	if (!DEBUG)
		return;
	for (const int& x: ans)
		fout << x << ' ';
	fout << '\n';
}
inline bool testAns() {
	long long curr = 0, prv = 0;
	int pos = 0, m = ans.size();
	for (int i = 0; i < n; ++i) {
		curr = curr * 10 + (initial[i] - '0');
		if (curr < 0)
			return 0;
		if (pos < m && ans[pos] == i) {
			if (curr <= prv)
				return 0;
			prv = curr;
			curr = 0;
			++pos;
		}
	}
	if (curr <= lastMin) {
		lastMin = curr;
		return 1;
	}
	return 0;
}
void back(int pos, long long last) {
	if (last <= lastMin && pos >= n && testAns()) {
		debug();
		finalAns = ans;
		return;
	}
	long long curr = 0;
	for (int i = pos; i < n; ++i) {
		curr = curr * 10 + (initial[i] - '0');
		if (curr < 0)
			return;
		if (curr > last) {
			if (i != n - 1)
				ans.push_back(i);
			back(i + 1, curr);
			if (ans.size())
				ans.pop_back();
		}
	}
}
int main()
{
	fin >> initial;
	n = initial.size();
	back(0, 0LL);
	int pos = 0, m = finalAns.size();
	for (int i = 0; i < n; ++i) {
		fout << initial[i];
		if (pos < m && finalAns[pos] == i)
			++pos, fout << ',';
	}
	return 0;
}



Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate