搜狗JAVA
发布于 2017-09-08 18:06 2563 次浏览 0 赞 来自 试题交流  

坐等搜狗结果出来,什么玩意,各种优化了还只是AC 30%,你厉害,时间也是醉了比较次数已经少的可怜了看看你们的

3 条回复

60%答案错误

2017-09-08 18:10

package sougou;


import java.util.Scanner;


/** 

 * [@author](/user/author) liugl  

 * [@date](/user/date) 2017年9月8日 下午4:32:50  

 **/

public class sogouOne {


public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc=new Scanner(System.in);

int N = sc.nextInt();

double [] arr=new double[N];

int i = 0;

while(sc.hasNextLine()&&i<N){

arr[i] = sc.nextDouble();

i++;

}

int j,k;double max = 0,m;

for(j=1;j<=arr.length-1;j++){

for(k=0;k<j;k++){

m = arr[j]-arr[k];

if(m<0){

return;

}

if(m>180){

m = 360-m;

}

if(m>max){

max = m;

}

}

}

// System.out.println(max);

System.out.printf("%1$.8f",max);

}


}

你的代码好复杂啊, 看不懂呀, 我的是50%。不知道少点什么。


2017-09-08 18:21
//用scanner卡在百分之九十TLE    bufferedreader一直runtime error   
//交卷了才发现bufferedreader用的有点问了 修改以后的代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String args[]) throws IOException {
        String str;
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        while((str = bufferedReader.readLine() )!=null){
            int n = Integer.parseInt(str);
            double a[] = new double[n];
            for (int i=0; i<n; i++){
                a[i] = Double.parseDouble(bufferedReader.readLine());
            }
            double answer = 0;
            for (int i=0; i<n; ++i){
                double fastMax = findA((a[i]+180)%360, a, 0, n-1, a[i]);
                double length = Math.abs(fastMax-a[i]);
                answer = Math.max(answer, length<180?length:360-length);
            }
            System.out.printf("%.8f\n", answer);
        }
        bufferedReader.close();
    }

    public static double findA(double m, double a[], int be, int ed, double ans){
        if(ed - be <= 1) {
            ans = getAns(m, ans, a[ed]);
            ans = getAns(m, ans, a[be]);
            return ans;
        }
        int mi = (be+ed)/2;
        if(a[mi] > m){
            ans = findA(m, a, be, mi, ans);
        }
        else if(a[mi] < m){
            ans = findA(m, a, mi, ed, ans);
        }
        else {
            ans = a[mi];
        }
        return ans;
    }

    public static double getAns(double m, double ans, double ami){
        if(Math.abs(m-ans) > Math.abs(m-ami))
            return ami;
        else
            return ans;
    }
}



2017-09-08 18:21
添加回复
回到顶部