整数Hash的应用
HDU1425
?
題意:
給你n個整數(shù),請按從大到小的順序輸出其中前m大的數(shù)。每組測試數(shù)據(jù)有兩行,第一行有兩個數(shù)n,m(0<n,m<1000000),第二行包含n 個各不相同,且都處于區(qū)間[-500000,500000]的整數(shù)。 #include <iostream> #include <string.h> #include <stdio.h>using namespace std;const int N=1000005;int a[N];int main() {int t,i,m,n;while(~scanf("%d%d",&n,&m)){memset(a,0,sizeof(a));for(i=0;i<n;i++){scanf("%d",&t);a[500000+t]=1;}for(i=1000000;m>=1;i--){if(a[i]){printf("%d",i-500000);if(m>1) printf(" ");else puts("");m--;}}}return 0; }HDU1280 題意:給定一個包含N(N<=3000)個正整數(shù)的序列,每個數(shù)不超過5000,對它們兩兩相加得到的N*(N-1)/2個和,求出其中前M大的數(shù) (M<=1000)并按從大到小的順序排列。 #include <iostream> #include <string.h> #include <stdio.h>using namespace std;int a[3005],count[10005]; bool b[10005];int main() {int i,j,m,n;while(~scanf("%d%d",&n,&m)){for(i=0;i<n;i++)scanf("%d",&a[i]);memset(b,0,sizeof(b));memset(count,0,sizeof(count));for(i=0;i<n;i++){for(j=i+1;j<n;j++){b[a[i]+a[j]]=1;count[a[i]+a[j]]++;}}for(i=10000;m>=1;i--){if(b[i]){while(count[i]--){printf("%d",i);if(m>1) printf(" ");else puts("");m--;if(m<1) break;}}}}return 0; }
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術(shù)人生
總結(jié)
- 上一篇: HDU4307(最小割)
- 下一篇: fibonacci数列的性质(ZOJ37