如果用队列不能只求前n个数,因为第n+1个数可能小于第n个数。
那么只对求出的前n个数进行排序然后取第n个数显然不是正确答案。
所以用队列复杂度很高,使用数组结合题意来写最简单。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 const int N=1e6+5; 6 typedef long long ll; 7 ll a[N]; 8 int main(){ 9 int m,n; 10 while(cin>>a[1]>>n){ 11 int rear=1,two=1,three=1; 12 while(rear<n){ 13 int t1=a[two]*2+1,t2=a[three]*3+1,t=min(t1,t2); 14 if(t1>t2)three++; 15 else two++; 16 if(a[rear]<t)a[++rear]=t; 17 } 18 cout<<a[rear]<<endl; 19 } 20 21 return 0; 22 }