HDU1005 一直都是Time Limit Exceeded 哇哈哈
阿新 • • 發佈:2019-02-14
一開始的程式是這樣的
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]);
}
}
}