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 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了