ac程序(写的特别冗长,大神勿喷)

#include<iostream>

using namespace std;

bool p[10];
int n,m,t,a,b,dff,o,q;
int d[11]={0,1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};

int main()
{
cin>>n;
for (int i=1;i<=n;++i)
{
cin>>m;
fill(p,p+10,false);
for (int j=1;j<=m;++j)
{
cin>>t;
p[t]=!p[t];
}
m=0;
for (int j=0;j<=9;++j)
if (p[j]) ++m;
if (m==2 && p[0])
{
for (int j=1;j<=9;++j)
if (p[j])
{
cout<<j<<endl;
break;
}
continue;
}
if (m%2==0)
{
dff=d[9];
t=10;
for (int j=1;j<9;++j)
for (int k=j+1;k<=9 && k-j<t;++k)
if (p[k] && p[j]) t=k-j;
for (int j=1;j<=9-t;++j)
if (p[j] && p[j+t])
{
a=(j+t)*d[m/2];
b=j*d[m/2];
o=1;
for (int k=9;k>=0 && o<m/2;--k)
if (k!=j && k!=j+t && p[k])
{
b+=k*d[m/2-o];
++o;
}
o=1;
for (int k=0;k<=9 && o<m/2;++k)
if (k!=j && k!=j+t && p[k])
{
a+=k*d[m/2-o];
++o;
}
if (dff>a-b) dff=a-b;
}
cout<<dff<<endl;
}
if (m%2==1)
{
a=b=0;
o=0;
for (int k=9;k>=0 && o<m/2;--k)
if (p[k])
{
b+=k*d[m/2-o];
++o;
}
o=0;
if (p[0])
{
for (int k=1;k<=9;++k)
if (p[k])
{
a=k*d[m/2+1];
q=k;
break;
}
o=2;
for (int k=q+1;k<=9 && o<m/2+1;++k)
if (p[k])
{
a+=k*d[m/2+1-o];
++o;
}
}
if (!p[0])
{
o=0;
for (int k=1;k<=9 && o<m/2+1;++k)
if (p[k])
{
a+=k*d[m/2+1-o];
++o;
}
}
dff=a-b;
cout<<dff<<endl;
}
}
return 0;
}

0 条评论

目前还没有评论...

信息

ID
1039
难度
7
分类
贪心 点击显示
标签
(无)
递交数
3708
已通过
832
通过率
22%
被复制
11
上传者