日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

codeforces 521div3(D Cutting Out)java

發(fā)布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codeforces 521div3(D Cutting Out)java 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接

測試用例:

很多情況會一直wa是因為題意沒用讀懂,進入自己的圈子無限wa,氣的記錄下來。。下次不能這么天真。
題意:給數(shù)字n和k,n是數(shù)字串的長度,k是要將數(shù)字分成的份數(shù)。讓這么多份的數(shù)字出現(xiàn)次數(shù)最多。

思路:
①首先說說我的錯誤思路,我想到將數(shù)字預處理,先將數(shù)字按照出現(xiàn)的次數(shù)排序,提取前K個。那么最壞的情況就是這K種都取。出現(xiàn)的次數(shù)最大為此時第k個數(shù)出現(xiàn)的次數(shù)(這是最壞的情況)。我剛開始認為出現(xiàn)最小的次數(shù)就是排序中value最小的那個。出現(xiàn)最大次數(shù)的可能性就是第一出現(xiàn)的次數(shù),后來發(fā)現(xiàn)我的想法是錯誤,舉個例子:測試數(shù)據(jù)1 1 1 1 1 1 2 2 2 2 2 2,k=3的時候,數(shù)值的種類還沒三總。只是對應1:5次,2:5次。然而結果是1 1 1 2 2,出現(xiàn)兩次。看來次數(shù)跟最小出現(xiàn)次數(shù)沒關系呢。要從頭開始遍歷呢。
②:看數(shù)據(jù)范圍,,如果要求不多勉強可以暴力,數(shù)據(jù)范圍也在二分的范圍內。然后看了其他大佬的教程,清一色二分。。我先用了沒有二分的方法過。然后加上二分。

沒有二分處理思想為:設初始出現(xiàn)的次數(shù)q=1為一次開始遍歷??偪赡艹霈F(xiàn)次數(shù)(模擬的K)一旦超過k停止當前循環(huán)。記錄次數(shù),這就是目前的最大次數(shù)。然后次數(shù)遞增遍歷直到count小于K停止次數(shù)的遞增。然后再遍歷list每個元素,除以出現(xiàn)的次數(shù)。直到總和為k次 。
二分:二分就是對次數(shù)進行二分。最大可能的次數(shù)為第一個出現(xiàn)的次數(shù)(不可能超過)。所以就left,right再1和max中二分查找。
可能是數(shù)據(jù)不太強,二分只比第一次快了一點點。但是這題的思想還是二分 排序處理。
附上二分代碼(202ms):

package codeforces521;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.ArrayList; import java.util.Comparator;import java.util.List; public class testD {public static void main(String[] args) throws IOException {// TODO 自動生成的方法存根StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));in.nextToken();int n=(int)in.nval;in.nextToken();int k=(int)in.nval;int a[]=new int[n];int map2[]=new int[200005];for(int i=0;i<n;i++){in.nextToken();a[i]=(int)in.nval;map2[a[i]]++;}List<node>list=new ArrayList<>();for(int i=0;i<200005;i++){if(map2[i]>0){node no=new node(i, map2[i]);//這個點的次數(shù)list.add(no);}}list.sort(com);int max=list.get(0).value;//出現(xiàn)最多的次數(shù)//不可能超過的次數(shù)int value=0;//最終出現(xiàn)的次數(shù)int mid=0;//二分查找/** 二分*/// int l=1;int r=max+1; // while(l<r) // { // mid=(l+r)/2; // // int count=0; // for(int i=0;i<list.size();i++) // { // count+=list.get(i).value/mid; // if(count>=k) // { // value=mid; // l=mid+1; // break; // } // } // if(count<k) // { // r=mid; // } // } // mid=value;for(int q=1;q<=max;q++){//System.out.println(q);int count=0;for(int i=0;i<list.size();i++){count+=list.get(i).value/q;if(count>=k){value=i;mid=q;//次數(shù)break;} }if(count<k){break;}}int time=0;//次數(shù),到K次就停止for(int i=0;i<list.size();i++){node team=list.get(i);int va=team.value;while(va-mid>=0){va-=mid;time++;if(time>k) {break;}out.print(team.index+" ");}if(time>k)break;}out.flush(); }static Comparator<node>com=new Comparator<node>() {@Overridepublic int compare(node o1, node o2) {// TODO 自動生成的方法存根return o2.value-o1.value;} };static class node{int index;//數(shù)值int value;//public node() {}public node(int index,int value){this.index=index;this.value=value;}}}

如果對后端、爬蟲、數(shù)據(jù)結構算法等感性趣歡迎關注我的個人公眾號交流:bigsai

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的codeforces 521div3(D Cutting Out)java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。