欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

codeforces Educational Codeforces Round 49 (Rated for Div. 2) C题

发布时间:2025/3/20 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 codeforces Educational Codeforces Round 49 (Rated for Div. 2) C题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
  • 刚开始拿到这题很懵逼,知道了别人的思路之后开始写,但是还是遇到很多坑,要求求P2/S最大。p=a b。就是求(a2+ b2 +2ab)/ab最大,也就是a/b +b/a最大。那么题意就很明显了。
    但是处理的时候还要注意,刚开始用map存入数据,保存数量大于2的数据。接着就是找最小的,千万不要用数组进行双重循环查找,这样的O(n*n)会爆时,要先排序O(lgn);然后对相邻的遍历比较一遍就可以了O(n)。当数据量很大的时候差距很明显。
    附上ac代码(java)
package codeforces504;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.Arrays; import java.util.HashMap; import java.util.Map; /** 贪心 数学 排序*/ public class testC {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;for(int i=0;i<n;i++){in.nextToken();int num=(int)in.nval;int a[]=new int[num];Map<Integer,Integer>map=new HashMap(); for(int j=0;j<num;j++){in.nextToken();int q=(int)in.nval;if(map.containsKey(q)) {map.put(q, map.get(q)+1);}else map.put(q, 1);}int index=0;int a2=0;int b2=0;boolean b=false;for(int q:map.keySet()){if(map.get(q)>=4) {a2=q;b2=q;b=true;break;}elseif(map.get(q)>=2) {a[index++]=q;}}if(!b) {Arrays.sort(a,0, index);//0-到index-1排序 double min=Double.MAX_VALUE;;for(int q=0;q<index-1;q++){double d=(double)a[q]/(double)a[q+1]+(double)a[q+1]/(double)a[q];if(d<min) {min=d;a2=a[q];b2=a[q+1];} }}out.println(a2+" "+a2+" "+b2+" "+b2);out.flush();}} }

总结

以上是生活随笔为你收集整理的codeforces Educational Codeforces Round 49 (Rated for Div. 2) C题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。