Ete_ghost 2015-03-25 11:53 采纳率: 0%
浏览 2749

错误票据 蓝桥杯 ACM 怎么会运行超时?

输出正确,时间开支太大了吗?


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

inline void swap(int *a, int *b){
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
inline int Partion(int *a, int left, int right){

    int i = left;
    int j = right + 1;

    int Ele = a[left];
    do{
        do i++; while (a[i] < Ele);
        do j--; while (a[j] > Ele);
        if (i < j) swap(&a[i], &a[j]);
    } while (i < j);

    swap(&a[left], &a[j]);
    return j;
}

inline void Qsort(int *a,int left,int right){
    int k;
    if (left < right){
        k = Partion(a, left, right);
        Qsort(a, left, k - 1);
        Qsort(a, k + 1, right);
    }
}
int main(){
    int n, i = 0, j = 0, tmp=0;
    int a[10000];
    char c;
    char str[20]="";
    int chong, duan;
    memset(a, -1, sizeof(a));

    scanf("%d", &n);
    getchar();

    while (n>0){
        c = getchar();
        if (c == 32){
            if (str[0] =='\0') continue;
            a[i++] = atoi(str);
            str[0] = '\0';
            j = 0;
            continue;
        }
        if (c == 10){
            n--;
            if (str[0] == '\0') continue;
            a[i++] = atoi(str);
            str[0] = '\0';
            j = 0;
            continue;
        }
        str[j] = c;
        str[j + 1] = '\0';
        j++;
    }



    Qsort(a,0,i);

    while (i > 0){
        tmp = a[i];
        if (a[i - 1] == tmp - 2)
            duan = tmp - 1;
        if (a[i - 1] == tmp)
            chong = tmp;
        i--;

    }
    printf("%d %d\n", duan,chong);

    return 0;
}


  • 写回答

2条回答 默认 最新

  • 程序员复盘 2015-04-02 07:00
    关注

    我当时选择的是桶排序,用空间去换时间,没有超时

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序