#include <bits/stdc++.h>
#pragma GCC optimize "O3"
using namespace std;
unsigned int n, f, h, dl;
unsigned int t[41];
unsigned int bt[41];
unsigned int odp[41][2];
void xd()
{
if(!f)
{
if(odp[dl][0]==h)
{
++odp[dl][1];
}
else if(odp[dl][0]>h)
{
odp[dl][0]=h;
odp[dl][1]=1;
}
return;
}
--f;
xd();
++f;
++dl;
unsigned int g=0;
for(unsigned int i=t[f]-1; i; --i)
{
g+=bt[i];
}
h+=g;
bt[t[f]]=1;
--f;
xd();
++f;
--dl;
h-=g;
bt[t[f]]=0;
}
int main()
{
scanf("%d", &n);
for(unsigned int i=1; i<=n; ++i)
{
scanf("%d", &t[i]);
odp[i][0]=1000000000;
}
f=n;
xd();
for(unsigned int i=1; i<=n; ++i)
{
printf("%d %d\n", odp[i][0], odp[i][1]);
}
return 0;
}
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 | #include <bits/stdc++.h> #pragma GCC optimize "O3" using namespace std; unsigned int n, f, h, dl; unsigned int t[41]; unsigned int bt[41]; unsigned int odp[41][2]; void xd() { if(!f) { if(odp[dl][0]==h) { ++odp[dl][1]; } else if(odp[dl][0]>h) { odp[dl][0]=h; odp[dl][1]=1; } return; } --f; xd(); ++f; ++dl; unsigned int g=0; for(unsigned int i=t[f]-1; i; --i) { g+=bt[i]; } h+=g; bt[t[f]]=1; --f; xd(); ++f; --dl; h-=g; bt[t[f]]=0; } int main() { scanf("%d", &n); for(unsigned int i=1; i<=n; ++i) { scanf("%d", &t[i]); odp[i][0]=1000000000; } f=n; xd(); for(unsigned int i=1; i<=n; ++i) { printf("%d %d\n", odp[i][0], odp[i][1]); } return 0; } |
English