Cod sursa(job #61378)

Utilizator floringh06Florin Ghesu floringh06 Data 19 mai 2007 10:40:22
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <set>
#include <string>

using namespace std;

int bc=0;

int main () {
	string s1, s2;
	ifstream in("subsir.in");
	FILE *fout=fopen("subsir.out","r");
	getline(in,s1);
	getline(in,s2);
	set<string> sol[2][250];  
	int a[505][505],act = 0;
	for (int i=0; i<=s1.size(); i++, act=!act)
		for (int j=0; j<=s2.size(); j++)
			if (i == 0 || j == 0) {
				a[i][j] = 0;
				sol[act][j].insert("");
			}
		else {
			sol[act][j].clear();
			if (s1[i-1] == s2[j-1]) {
				a[i][j] = a[i-1][j-1]+1;
				for (set<string>::iterator it = sol[!act][j-1].begin(); it != sol[!act][j-1].end(); ++it)
					sol[act][j].insert(*it + s1[i-1]);
			}
			else {
				a[i][j] = max(a[i-1][j], a[i][j-1]);
				if (a[i][j] == a[i-1][j])
					sol[act][j] = sol[!act][j];
				if (a[i][j] == a[i][j-1])
					sol[act][j].insert(sol[act][j-1].begin(), sol[act][j-1].end());
			}
		}
	act = s1.size() % 2;
	for (set<string>::iterator it = sol[act][s2.size()].begin(); it != sol[act][s2.size()].end(); ++it)
		bc++;
	fprintf(fout,"%d",bc);
	return 0;
}