hdoj 1280 前M大的數

2021-06-27 11:43:11 字數 1649 閱讀 4039

最開始的思路是: 最大的和肯定由原始序列種最大的前k個數兩兩組合產生,由於m <= 1000, 所以輸入序列中的前50個數就夠用了(50*49/2 = 1225 > 1000)。 然後用兩次stl裡的排序就能求出最大的m個數了,不知道為啥一直wa。 只好寫了個counting sort ac了。

方法一: 計數排序

/*

prog: 前m大的數

lang: c++11

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define mst(a,b) memset(a,b,sizeof(a))

typedef long long ll;

const int n = 100010;

const ll mod = 1000000007;

const int inf = 0x7fffffff;

int a[3005];

int res[10005];

bool cmp(int x, int y)

int main()

for(i = 0; i < n-1; i++)

}for(i = 10000; i >= 0; i--)

else}}

}return 0;

}

方法二: 自己的case能過,一直wa, 誰看出bug了麻煩留個言哈

/*

prog: 前m大的數

lang: c++11

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define mst(a,b) memset(a,b,sizeof(a))

typedef long long ll;

const int n = 100010;

const ll mod = 1000000007;

const int inf = 0x7fffffff;

int a[3005];

int res[10005];

bool cmp(int x, int y)

int main()

sort(a, a+n, cmp);

int k = min(50, n);

int index = 0;

for(i = 0; i < k-1; i++)

}sort(res, res+k*(k-1)/2, cmp);

for(i = 0; i < m-1; i++)

cout << res[i] << " ";

cout << res[m-1] << endl;

}return 0;

}

hdoj 1280 前m大的數!

思路 這題和矩陣轉置有一點聯絡,它們兩兩相加得到的 n n 1 2 個和,其實就是矩陣的上三角或下三角,這一點解決了,再來個qsort就搞定啦!還有注意陣列的大小!我在這栽跟頭了 inta 3005 c 5000000 注意陣列的大小!intmain qsort c,k,sizeof int com...

HDOJ 1280 前m大的數

超級傳送門 由於n 3000,它們和的組合n n 1 2是乙個比較大的數,直接暴力求解必然tle。不過題目中說了 每個數不超過5000,而且都是正整數,所以可以用hash來嘗試一下。includeint main while scanf d d n,m eof else printf printf ...

hdoj 1280 前m大的數(水)

前m大的數 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status practice hdu 1280 description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經...