Cod sursa(job #382372)

Utilizator thekrisserzaharia cristian thekrisser Data 13 ianuarie 2010 16:18:49
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb

#include <cstdio> 
#include <vector> 
#define maxN 5001 
int N; 
int S[3][maxN], Cnt[maxN]; 
void Swap(int &i, int &j)
{ 
int t = i; 
i = j; 
j = t; 
} 
int main() 
{ 
freopen("sortare.in", "rt", stdin); 
freopen("sortare.out", "wt", stdout); 
S[0][0] = 0; 
S[1][1] = 1; 
Cnt[0] = 1; 
Cnt[1] = 1; 
int i; 
for(scanf("%d", &N), i=2; i<=N; ++i) 
{ 
int a, b, c; 
scanf("%d %d %d", &a, &b, &c); 
memset(S[i%3], 0, sizeof(S[i%3])); 
if(a > b) Swap(a, b); 
if(a > c) Swap(a, c); 
if(b > c) Swap(b, c);  
int j, k; 
if(a != b && b != c) 
{ 
S[i%3][a] = 1; 
S[i%3][b] = 2; 
k = 0; 
for(j=1; j<=i; ++j) 
if(!S[i%3][j]) S[i%3][j] = S[(i-2)%3][++k] + 2; 
Cnt[i] = Cnt[i-2] + 1; 
} 
else 
{ 
if(a == b) 
S[i%3][a] = 1; 
else 
S[i%3][b] = 1; 
k = 0; 
for(j=1; j<=i; ++j) 
if(!S[i%3][j]) S[i%3][j] = S[(i-1)%3][++k] + 1; 
Cnt[i] = Cnt[i-1] + 1; 
} 
} 
printf("%d\n", Cnt[N]); 
for(i=1; i<=N; ++i) 
printf("%d ", S[N%3][i]); 
fclose(stdin); 
fclose(stdout); 
return 0;
}