切换到宽版
  • 3992阅读
  • 0回复

郁闷死了,同样的思路,用C++能过,用C却就是超时! [复制链接]

上一主题 下一主题
离线tobenoone
 
只看楼主 倒序阅读 0 发表于: 2007-11-11
今天在VIJOS上做04年合并苹果的题http://www.vijos.cn/Problem_Show.asp?id=1097
写了个快速排序+插入排序,递交,10个数据全部超时!
于是进讨论区,一位C++的仁兄也是快速排序+插入排序,把他的递交上去AC!
郁闷啊,怎么办啊!

我的C版
#include <stdio.h>
#include <conio.h>

//合并苹果
//noip2005

long a[10001];
int n;
int n1;
void quicksort(int left,int right)
{
    int i=left,j=right;
    long temp=a;
    while(i<j)
    {
        while(temp>a[j]&&j>i)  j--;
        if(j>i) {a=a[j]; i++;}
        while(temp<a&&j>i)  i++;
        if(j>i) {a[j]=a; j--;}
    }
    a=temp;
    if(left<i-1)    quicksort(left,i-1);
    if(right>i+1)  quicksort(i+1,right);
}


void charu(int n)

    long temp=a[n];
    int i=n-1;
    while(a[n]>a&&i>=1)
    {a[i+1]=a;
    i--;
    }
    a[i+1]=temp;
}


int main(void)
{
    int i,j;
    long zong=0;
    scanf("%d",&n);
    n1=n;
   
    for(i=1;i<=n;i++)
    {
        scanf("%ld",&a);
    }
    i=1;
    quicksort(1,n);
    a[n1-i]=a[n1-i]+a[n1-i+1];
    zong+=a[n1-i];
    n--;
    for(i=2;i<=n1-1;i++)
    {
        charu(n);
        a[n1-i]=a[n1-i]+a[n1-i+1];
        zong+=a[n1-i];
        n--;
    }
    printf("%ld",zong);
    getch();
    return 0;
}

C++的:

#include<iostream>
using namespace std;
int a[10001],b[10001];
int n;
void qsort(int*a,int l,int r)
{int i,j;
int t;
    i=l;j=r;t=a;
    while(i<j)
    {
        while(a[j]>t&&j>i)
j--;
        if (i<j)
{a=a[j];i++;}
while(a<t &&i<j)
i++;
if (i<j) {a[j]=a;j--;}
}

a=t;i++;j--;
if(l<j) qsort(a,l,j);
if(i<r) qsort(a,i,r);
}

void init()
{  int i,j,s[20001];
cin>>n;
for(i=1;i<=n;i++)
cin>>a;
qsort(a,1,n);
}

void insort()
{for(int i=2;i<=n;i++)
{ a[0]=a;
int j=i-1;
while (a[j]>a[0])
  {a[j+1]=a[j];
j--;
  }
a[j+1]=a[0];
}
}
void doit()
{long i,all=0;
for(i=1;i<=n-1;i++)
  {a[i+1]=a+a[i+1];
all+=a[i+1];a=0;
insort();
  }
cout<<all;
}
int  main()
{
init();
doit();

return 0;
}

快速回复
限100 字节
 
上一个 下一个