bzoj 1583

Description

Input

第一行两个数,C和N

第二行3个数,a1,b1,c1 第三行3个数,a2,b2,c2

Output

一个整数代表最长的那一次嚎叫

Sample Input

3 10
4 3 3
17 8 2

Sample Output

65
思路: 贪心,用一个队列,模拟两个指针,即当前两个公式可以产生的最小值。  
 1 #include<bits/stdc++.h>
 2 using namespace std;  
 3 #define ll long long 
 4 ll c,n,a1,b1,c1,a2,b2,c2; 
 5 ll q[5000003];  
 6 int main(){
 7     scanf("%lld%lld",&c,&n);  
 8     scanf("%lld%lld%lld",&a1,&b1,&c1); 
 9     scanf("%lld%lld%lld",&a2,&b2,&c2); 
10     int x=1,y=1,num=1;  
11     q[1]=c;  
12     for(int i=2;i<=n;i++){
13         ll v1=q[x]*a1/c1+b1;  
14         ll v2=q[y]*a2/c2+b2;  
15         if(v1<v2) q[i]=v1,x++;  
16         else if(v2<v1) q[i]=v2,y++;  
17         else q[i]=v1,x++,y++;  
18     }
19     cout<<q[n]<<endl; 
20     return 0; 
21 } 
View Code

 

posted @ 2019-07-05 09:22  zjxxcn  阅读(86)  评论(0编辑  收藏  举报