#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
long buf[1000000],rst[1000000],num,k,i,j,tmp,sum,min,pnt;
while(cin >> num)
{
pnt=0;
for(k=0;k<num;k++)
{
cin >> buf[k];
}
tmp=buf[0];
sum=0;
for(k=0;k<num;k++)
{
sum += abs(tmp-buf[k]);
}
pnt=0;
min=sum;
rst[pnt]=buf[0];
for(k=1;k<num;k++)
{
tmp=buf[k];
sum=0;
for(i=0;i<num;i++)
{
sum += abs(tmp-buf[i]);
}
if(sum<min)
{
min=sum;
for(j=0;j<=pnt;j++){rst[j]=0;}
pnt=0;
rst[pnt]=buf[k];
}
else if(sum==min)
{
pnt+=1;
rst[pnt]=buf[k];
}
}
if(pnt>0)
{
cout << "A=" << rst[0];
for(j=1;j<=pnt;j++){cout << "、" << rst[pnt];}
cout << endl;
}
else
{
cout << "A=" << rst[0] << endl;
}
}
return 0;
}
#include
#include
#include
using namespace std;
int main()
{
long buf[1000000],rst[1000000],num,k,i,j,tmp,sum,min,pnt;
while(cin >> num)
{
pnt=0;
for(k=0;k {
cin >> buf[k];
}
tmp=buf[0];
sum=0;
for(k=0;k {
sum += abs(tmp-buf[k]);
}
pnt=0;
min=sum;
rst[pnt]=buf[0];
for(k=1;k {
tmp=buf[k];
sum=0;
for(i=0;i {
sum += abs(tmp-buf[i]);
}
if(sum {
min=sum;
for(j=0;j<=pnt;j++){rst[j]=0;}
pnt=0;
rst[pnt]=buf[k];
}
else if(sum==min)
{
pnt+=1;
rst[pnt]=buf[k];
}
}
if(pnt>0)
{
cout << "A=" << rst[0];
for(j=1;j<=pnt;j++){cout << "、" << rst[pnt];}
cout << endl;
}
else
{
cout << "A=" << rst[0] << endl;
}
}
return 0;
}
要找出數列中使運算式得到最小值,其實和求最矩離和一樣,在中間點的位置可得最小值
另外一個造成TLE的因素排序法,因為數列可能很大要選用速度快的排序法