SRM 508(6/3 0:00~2:00)
■DivideAndShift(Easy)
答えをf(n,m)として,再帰的に解きました.素因数分解をして,素数のべき乗ごとに再帰するので, 制限時間には余裕で間に合います.
- import java.util.*;
- import java.lang.*;
- import java.math.*;
- import java.io.*;
- import static java.lang.Math.*;
- import static java.util.Arrays.*;
- public class DivideAndShift {
- int INF=1<<28;
- double EPS=1e-9;
- int rec(int n, int m){
- if(m==0){
- return 0;
- }
- HashMap<Integer,Integer> map=primeFactor(n);
- int res=min(m,n-m);
- for(int p:map.keySet()){
- if(p==1){
- continue;
- }
- res=min(res,rec(n/p,m%(n/p))+1);
- }
- return res;
- }
- public int getLeast(int n, int m) {
- return rec(n,m-1);
- }
- HashMap<Integer, Integer> primeFactor(int n){
- HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
- for(int i=2; i*i<=n; i++){
- int c=0;
- for(; n%i==0; n/=i)
- c++;
- if(c>0)
- map.put(i, c);
- }
- if(n!=1)
- map.put(n, 1);
- return map;
- }
- void debug(Object...os){
- System.err.println(Arrays.deepToString(os));
- }
- void print(String s){
- System.out.print(s);
- }
- void println(String s){
- System.out.println(s);
- }
- }
■Challenge Phase
撃墜無し.■Result
o-- +0/-0125.55pts. 406th
■Rating
1365 -> 1414微増.目標の1500にはいつ到達できるのか….
0 件のコメント:
コメントを投稿