先週に引き続き.
■LockersDivOne(DIV1 Easy)
□Problem
1~N(1≦N≦2000000)まで番号付けされたロッカーがある.全てのロッカーは,閉じられている.
DaveとEarlは,番号の昇順にロッカーを見ていき,最初に見つけた閉じられているロッカーを開ける.その後,閉じられているロッカーを2個見つける度にそのロッカーを開けていく.番号Nまで戻ったら,はじめに戻り,2個飛ばしを3個飛ばしにし,同様のことをする.以降,4,5,6,…とロッカーを飛ばす個数を増やしていく.最後に残ったロッカーの番号は何か.
最初はLinkedListで実装しましたが,最大ケースを試したところ,メモリが足りないと言われかなり焦りました.しょうが無いので配列による実装に落ち着きましたが,最初から配列による実装にしていれば,もっと早く提出出来たと思います.ただ,今回は,Resubmitを一度もしないで済んだので,104.04pでした.
□Code
- import java.util.*;
- import java.lang.*;
- import java.math.*;
- public class LockersDivOne{
- public int lastOpened(int N){
- int[] a=new int[10000];
- int[] b=new int[N];
- for(int i=0;i<N;i++){
- for(int k=2;k<a.length;k++){
- if(a[k]==0){
- a[k]++;
- b[i]=k;
- // System.out.println("i="+i+", k="+k);
- break;
- }else{
- a[k]++;
- }
- if(a[k]==k)
- a[k]=0;
- }
- }
- int ret=0;
- for(int i=0;i<N;i++){
- if(b[i]>b[ret])
- ret=i;
- //if(b[i]<2)
- // System.out.println("Error!");
- }
- //System.out.println(Arrays.toString(b));
- //System.out.println(Arrays.toString(a));
- return ret+1;
- }
- }
■Challenge
は,今回やりませんでした.
■Result
○×× 0 -0
104.04p
■Rating
1339 -> 1372
やっとhighestを更新しました.今年中には1500まで上げたいと思います.
0 件のコメント:
コメントを投稿