CF #521 div.3 D Cutting Out
阿新 • • 發佈:2018-11-19
Cutting Out
題目大意: 選出 k 個數,要求這 k 個數組成的組合在原序列中出現次數最多,輸出方案。
題解:
div.3 都不會做了,要加強了啊!!!
二分出現的次數 mid。然後用每個數出現的次數 整除 mid = x, x 就是對序列個數的貢獻。
如果個數 >=k 符合條件。
最後從大到小掃一遍,取前k個。
貼程式碼:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,i,j,k,l,r,m,x,y;View Code4 const int N=200000; 5 pair<int,int> a[N+1]; 6 int main() 7 { 8 for(cin>>n>>k; i<n; i++) 9 cin>>x,a[x].first++,a[x].second=x; 10 sort(a,a+N+1); 11 for(x=0,l=1,r=n; l+1<r; ) 12 { 13 m=(l+r)/2; 14 for(x=0,i=N; i>0; i--) x+=a[i].first/m;15 x>=k?l=m:r=m; 16 } 17 for(i=N; i>0; i--) 18 for(j=a[i].first/l; j>0&&k-->0; j--) 19 cout<<a[i].second<<" "; 20 }
fighting fighting fighting!!!