九度Online Judgeアルゴリズムブラシ問題1034:大金持ちを探す


テーマ1034:大金持ちを探す
浙江桐郷烏鎮にはn人がいます.この町の元m人の大金持ちを見つけてください.入力:複数の試験例を含む入力.各使用例は、まず2つの整数nを含む(0<n<=100000) m(0<m<=10)、うちnは町の人数、mは探し出す大金持ちの数、次の行は町のn人の財産値を入力します.nとmが同時に0の場合は入力が終わります.出力:烏鎮の前のm人の大金持ちの財産数を出力してください.財産の多い列の前で、大金持ちがm人未満の場合、すべて出力して、各グループの出力は1行を占めます.サンプル入力:3 1 2 5-153 1 2 3 4 5 0サンプル出力:5 5 4 3ソース:2009年浙江大学コンピュータ及びソフトウェアエンジニアリング研究生気試験本題
code
C言語実現
#include<stdio.h>

int main() {

    int i,j;
    int *p=NULL;
    int *q=NULL;
    int n,m,temp;

    while( scanf("%d %d",&n,&m) ==2) {
        if (n == 0 && m == 0) 
            break;
        else if (n<0 || n>100000 || m<0 || m>10)
            continue;
        else { 
            p = (int *)malloc(sizeof(int)*n);
            q = (int *)malloc(sizeof(int)*m);
            for(i=0;i<n;i++)
                scanf("%d",p+i);
            for(i=0;i<m ;i++)
                for (j=0;j<n-1-i;j++) 
                    if (p[j]>p[j+1]){
                        temp = p[j];
                        p[j] = p[j+1];
                        p[j+1] = temp;
                    }
            for (i=n-1;i>n-m && i>0;i--)
                printf("%d ",p[i]);
            printf("%d
"
,p[i]); } } return 0; } /************************************************************** Problem: 1034 User: langzimaizan Language: C Result: Accepted Time:20 ms Memory:1104 kb ****************************************************************/

タイムアウトエラーが発生し始めましたTime Limit Exceed
#include<stdio.h>

int main() {

    int i,j;
    int *p=NULL;
    int *q=NULL;
    int n,m,temp;

    while( scanf("%d %d",&n,&m) ==2) {
        if (n == 0 && m == 0) 
            break;
        else if (n<0 || n>100000 || m<0 || m>10)
            continue;
        else { 
            p = (int *)malloc(sizeof(int)*n);
            q = (int *)malloc(sizeof(int)*m);
            for(i=0;i<n;i++)
                scanf("%d",p+i);
            for(i=0;i<n-1;i++)
                for (j=0;j<n-1-i;j++) 
                    if (p[j]>p[j+1]){
                        temp = p[j];
                        p[j] = p[j+1];
                        p[j+1] = temp;
                    }
            for (i=n-1;i>n-m;i--)
                printf("%d ",p[i]);
            printf("%d
"
,p[i]); } } return 0; } /************************************************************** Problem: 1034 User: langzimaizan Language: C Result: Time Limit Exceed ****************************************************************/