1. 程式人生 > >HDU1005 一直都是Time Limit Exceeded 哇哈哈

HDU1005 一直都是Time Limit Exceeded 哇哈哈

一開始的程式是這樣的

import java.util.Scanner;

public class Hdu1005{
    public static void main(String[]args){
        int x,y,a,b,n;
        x=1;
        y=1;
        Boolean flag=true;
        Scanner scan=new Scanner(System.in);
        while(true){
            a=scan.nextInt();
            b=scan.nextInt();
            n=scan.nextInt();
            if
(a==0&&b==0&&n==0)break; if(n==1||n==2){ System.out.println("1"); continue; } else{ for(int i=0;i<n-2;i++){ if(flag){ x=(a*x+b*y)%7; flag=false
; continue; } else{ y=(a*y+b*x)%7; flag=true; continue; } } } if(flag){ System.out.println(y); } else
{ System.out.println(x); } } } }

提交之後,反饋是Time Limit Exceeded。
What!!!!
本來人家今天開開心心的,為什麼這樣對我,藍受,香菇。
沒辦法只能減肥了。
經過努力,登登登登,瘦身成功。哇哈哈。

import java.util.Scanner;

public class Main{
    public static void main(String[]args){
        int x,y,a,b,n,t;
        x=1;
        y=1;
        Scanner scan=new Scanner(System.in);
        while(true){
            a=scan.nextInt();
            b=scan.nextInt();
            n=scan.nextInt();
            if(a==0&&b==0&&n==0)break;
            if(n==1||n==2){
                System.out.println("1");
                continue;
            }
            else{
                for(int i=0;i<n-2;i++){
                    t=y;
                    y=(a*x+b*y)%7;
                    x=t;
                }
            }
            System.out.println(y);
        }       
    }
}

心情再一次美麗起來!!!!結果
Time Limit Exceeded.
聽 聽 聽見了嗎?
心碎的聲音。
不行了,我要去抱大神腿了,查了查。問題出在對於7的餘數只能是{0,1,2,3,4,5,6}這7種,對於f[n-1]和f[n]的組合就是7*7=49種。
思路就是做出來f[49]表,f[n]=f[n%49]。
對於這種題,我只想說,小碧池。哼!

import java.util.Scanner;

public class Main{
    public static void main(String[]args){
        int a,b,n;
        Scanner scan=new Scanner(System.in);
        while(true){
            a=scan.nextInt();
            b=scan.nextInt();
            n=scan.nextInt();
            if(a==0&&b==0&&n==0)break;
            int f[]=new int[50];
            f[1]=1;
            f[2]=1;
            for(int i=3;i<50;i++){
                f[i]=(a*f[i-1]+b*f[i-2])%7;
            }
            System.out.println(f[n%49]);
        }       
    }
}