hdu 1058 +hdu 3199

11032 단어 HDU
제목 링크:
http://acm.hdu.edu.cn/showproblem.php?pid=1058
http://acm.hdu.edu.cn/showproblem.php?pid=3199
이 두 문 제 는 매우 유사 하 다. 그 사상 은 가장 작은 만족 조건 에서 계산 하여 한 걸음 한 걸음 결 과 를 구 하 는 것 이다.
hdu 1058


View Code
 1 #include<iostream>

 2 #include<algorithm>

 3 const int N=5843;

 4 #define min(a,b)  (a)<(b)?(a):(b)

 5 using namespace std;

 6 int num[N];

 7 

 8 int main(){

 9     int i=1,j=1,k=1,l=1;

10     num[1]=1;

11     for(int count=2;count<=N;count++){

12         int a=num[i]*2;

13         int b=num[j]*3;

14         int c=num[k]*5;

15         int d=num[l]*7;

16         int ans=min(a,min(b,min(c,d)));

17         if(a==ans)i++;

18         if(b==ans)j++;

19         if(c==ans)k++;

20         if(d==ans)l++;

21         num[count]=ans;

22     }

23     int n;

24     while(scanf("%d",&n)!=EOF&&n){

25         printf("The %d",n);

26         if(n%100!=11&&n%10==1)printf("st");

27         else if(n%100!=12&&n%10==2)printf("nd");

28         else if(n%100!=13&&n%10==3)printf("rd");

29         else printf("th");

30         printf(" humble number is %d.
",num[n]); 31 } 32 return 0; 33 }

 
hdu 3199:


View Code
 1 #include<iostream>

 2 #include<cstring>

 3 const int N=200000000;

 4 #define min(a,b) (a)<(b)?(a):(b)

 5 using namespace std;

 6 __int64 f[N];

 7 

 8 int main(){

 9     __int64 p1,p2,p3,n;

10     while(scanf("%I64d%I64d%I64d%I64d",&p1,&p2,&p3,&n)!=EOF){

11         f[1]=1;

12         __int64 i=1,j=1,k=1;

13         for(int count=2;count<=n+1;count++){

14             __int64 a=f[i]*p1;

15             __int64 b=f[j]*p2;

16             __int64 c=f[k]*p3;

17             __int64 ans=min(a,min(b,c));

18             if(ans==a)i++;

19             if(ans==b)j++;

20             if(ans==c)k++;

21             f[count]=ans;

22         }

23         printf("%I64d
",f[n+1]); 24 } 25 return 0; 26 }

 

좋은 웹페이지 즐겨찾기