2010年10月1日金曜日

PKU Judge Online 3100 Root of the Problem

■3100 Root of the Problem

□Problem
整数b,nが与えられる.anがbと最も近くなるような整数aを求めよ.

□Solution
a=elog(b)/n
なので,上式で近そうな値をとり,その周辺を探す.

□Code
package p3100;

import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;

import static java.lang.Math.*;
import static java.util.Arrays.*;

// AC
public class Main{

Scanner sc=new Scanner(System.in);

final int INF=Integer.MAX_VALUE;
final double EPS=1e-9;

void run(){
for(;;){
int b=sc.nextInt();
int n=sc.nextInt();
if(b==0&&n==0)
break;
int a=(int)Math.exp(Math.log(b)/n);
a--;
int ans=a;
double ansPowN=Math.pow(ans, n);
for(int i=a;; i++){
double iPowN=Math.pow(i, n);
if(Math.abs(b-iPowN)<Math.abs(b-ansPowN)){
ans=i;
ansPowN=iPowN;
}
if(iPowN>b){
break;
}
}
println(ans+"");
}
}

void print(String s){
System.out.print(s);
}

void println(String s){
System.out.println(s);
}

public static void main(String[] args){
// System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
new Main().run();
}
}

0 件のコメント: