最開始的思路是: 最大的和肯定由原始序列種最大的前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 其實小希已經...