似魔鬼的步伐

题面:

假设他拥有N格体力。初始摩擦值为0,每次可以选择可以摩擦或者行走。摩擦消耗两格体力,第n次的摩擦值=第n-1次的摩擦值*2+2。行走消耗一格体力,第n次的摩擦值=第n-1次的摩擦值*1+1。求最大的摩擦值为多少?

思路:

贪心,消耗两格体力比消耗一格体力更优,所以如果n为奇数则先消耗一格体力,成为偶数,偶数的话全部消耗两个体力。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,x;
 4 long long ans;
 5 const int p=1000000007;
 6 int main(){
 7     scanf("%d",&n);
 8     for (int i=1;i<=n;i++){
 9         scanf("%d",&x);
10         if (x%2==0){
11             ans=0;
12             for (int i=1;i<=x/2;i++){
13                 ans=(ans*2+2)%p;
14             }
15         }else{
16             ans=1;
17             for (int i=1;i<=x/2;i++){
18                 ans=(ans*2+2)%p;
19             }
20         }printf("%lld\n",ans);
21     } 
22 }
View Code

猜你喜欢

转载自www.cnblogs.com/Accpted/p/11185426.html