Cod sursa(job #166187)

Utilizator scvalexAlexandru Scvortov scvalex Data 27 martie 2008 17:13:55
Problema Suma divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <fstream>

using namespace std;

int N,
	V[5000];

int cnt[5000],
	p[5000];

int main(int argc, char *argv[]) {
	FILE *fi = fopen("subsir2.in", "r");
	fscanf(fi, "%d", &N);
	for (int i(0); i < N; ++i)
		fscanf(fi, "%d", V + i);
	fclose(fi);

	for (int i = N - 1; i >= 0; --i) {
		int m = 6000,
			mj = -1;
		int mn = 6000;
		for (int j = i + 1; j < N; ++j)
			if (V[j] >= V[i]) {
				if (V[j] >= mn) 
					continue;
				mn = V[j];
				if (cnt[j] < m)
					m = cnt[j],
					mj = j;
			}
		if (mj == -1)
			m = 0;
		cnt[i] = m + 1;
		p[i] = mj;
	}

	for (int i(0); i < N; ++i)
		cout << cnt[i] << " ";
	cout << endl;

	int m = -1,
		mj = 0;
	for (int i(0); i < N; ++i)
		if (cnt[i] > m)
			m = cnt[i],
			mj = i;

	FILE *fo = fopen("subsir2.out", "w");
	fprintf(fo, "%d\n", m);
	for (int i = mj; i != -1; i = p[i])
		fprintf(fo, "%d ", i + 1);
	fprintf(fo, "\n");
	fclose(fo);

	return 0;
}