2010/01/27

p027 Light more light

最後一個燈泡的開關是否打開?

有幾點你應該要立即注意到:


  • 當Mabu已經完成他第n次的巡迴,第n個開關從來沒被再次改變。
  • 如果開關被改變奇數次(因為一定是開->關->開....)答案就是yes
  • 每當為n的因數時,第n個開關會被改變


藉由這個想法,我們該如何知道一個數字的因數是奇數個還是偶數個?對於每個n都有著一個低於sqrt(n)和一個高於sqrt(n)的因數,這個假設除非n是一個完全平方數,否則他就會有偶數個因數所以這個問題可以被想為決定n是否是一個完全平方數

/**
 * Time(ZeroJudge):78ms
 * Date: 2010-1-28
 * 
 * @author Kurorido
 */
import java.util.Scanner;

public class JAVA {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        while(sc.hasNext()) {
            
            double num = sc.nextDouble();
            
            if(num == 0.0)
                break;
            
            double sqrtNum = Math.ceil(Math.sqrt(num));
            
            if(num == sqrtNum * sqrtNum)
                System.out.println("yes");
            else
                System.out.println("no");
        }
    }
}

比排行榜上最快慢了6ms...我一開始被型態搞死...Online Judge貌似不讓人強制轉型= =?

如果if( int == double ) 這種 compare 會被打死
如果(int)Math.sqrt(num) 貌似也會掛掉= =

No comments:

Post a Comment