#7182: 出現TLE錯誤,有人知道問題出在那裡嗎?困擾了好久都無法解決。


jackytung (jacky)

學校 : 國立旗美高級中學
編號 : 26644
來源 : [203.71.250.14]
最後登入時間 :
2016-04-21 16:07:19
d501. 第二題:數列最小值 -- 98學年度高雄市資訊學科能力競賽 | From: [203.71.250.15] | 發表日期 : 2012-11-13 15:49

#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;
}

 
#7309: Re:出現TLE錯誤,有人知道問題出在那裡嗎?困擾了好久都無法解決。


akira0331 (小迷糊)

學校 : 不指定學校
編號 : 26613
來源 : [203.70.194.240]
最後登入時間 :
2013-07-29 09:30:29
d501. 第二題:數列最小值 -- 98學年度高雄市資訊學科能力競賽 | From: [203.70.194.240] | 發表日期 : 2012-12-18 16:22

#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的因素排序法,因為數列可能很大要選用速度快的排序法

 
ZeroJudge Forum