-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathpalind.cpp
75 lines (71 loc) · 1.92 KB
/
palind.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <algorithm>
# define nrmax 7005
using namespace std;
int i,j,n,m,dif,sol,q,o,t,l,maxx,k,nrsol[5],x;
int ap[2][nrmax],mari[2][nrmax],mici[2][nrmax],ptmari[2][nrmax],ptmici[2][nrmax],minn[5];
void procesare ()
{
int i;
memset(mici, 0, sizeof(mici));
memset(mari, 0, sizeof(mari));
for (i=1; i<=maxx; ++i)
{
mici[0][i]=mici[0][i-1]+ap[0][i-1];
mici[1][i]=mici[1][i-1]+ap[1][i-1];
}
for (i=maxx; i>=1; --i)
{
mari[0][i]=mari[0][i+1]+ap[0][i+1];
mari[1][i]=mari[1][i+1]+ap[1][i+1];
}
}
void numarare ()
{
int i;
//calculam costul
minn[0]=99999999; minn[1]=99999999;
memset(ptmici, 0, sizeof(ptmici));
memset(ptmari, 0, sizeof(ptmari));
for (i=1; i<=maxx; ++i)
{
ptmici[0][i]=ptmici[0][i-1]+mici[0][i-1]+ap[0][i-1];
ptmici[1][i]=ptmici[1][i-1]+mici[1][i-1]+ap[1][i-1];
}
for (i=maxx; i>=1; --i)
{
ptmari[0][i]=ptmari[0][i+1]+mari[0][i+1]+ap[0][i+1];
ptmari[1][i]=ptmari[1][i+1]+mari[1][i+1]+ap[1][i+1];
}
for (i=1; i<=maxx; ++i)
{
if (ptmari[0][i]+ptmici[0][i]<minn[0]) minn[0]=ptmari[0][i]+ptmici[0][i],nrsol[0]=1;
else if (ptmari[0][i]+ptmici[0][i]==minn[0]) ++nrsol[0];
if (ptmari[1][i]+ptmici[1][i]<minn[1]) minn[1]=ptmari[1][i]+ptmici[1][i],nrsol[1]=1;
else if (ptmari[1][i]+ptmici[1][i]==minn[1]) ++nrsol[1];
}
}
int main ()
{
freopen ("palind.in", "r", stdin);
freopen ("palind.out", "w", stdout);
scanf ("%d", &t);
for (o=1; o<=t; ++o)
{
scanf ("%d", &n);
memset(ap, 0, sizeof(ap));
maxx=0;
for (i=1; i<=n; ++i)
{
scanf ("%d", &x);
if (x>maxx) maxx=x;
++ap[i%2][x];
}
procesare ();
numarare();
printf ("%d %d\n", minn[0]+minn[1], nrsol[0]*nrsol[1]);
}
return 0;
}