问题 G: 似魔鬼的步伐
时间限制: 1 Sec 内存限制: 128 MB
提交: 160 解决: 63
[提交] [状态] [命题人:admin]
题目描述
一步两步一步两步,一步一步似爪牙。似魔鬼的步伐。摩擦摩擦,在这光滑的地上摩擦摩擦,似魔鬼的步伐。似魔鬼的步伐。庞麦郎喜欢在光滑的地板上摩擦。假设他拥有N格体力。初始摩擦值为0,每次可以选择可以摩擦或者行走。摩擦消耗两格体力,第n次的摩擦值=第n-1次的摩擦值*2+2。行走消耗一格体力,第n次的摩擦值=第n-1次的摩擦值*1+1。求最大的摩擦值为多少?
输入
第一行有一个正整数K。
接下来有K行,每行有一个数N。
数据保证1≤K≤100 ,0≤N≤1 000 0。摩擦值对1 000 000 007取模。
输出
输出k行,第i行代表第i个数据的的结果
样例输入
2 1 5
样例输出
1 10
显然,摩擦第行走更优,毕竟乘2,所以应尽量做摩擦操作。当为偶数时,直接全部做摩擦操作;为奇数时,多出来一个体力, 那肯定最先做一次行走,这样接下来摩擦的初始状态就是1,如果不最先做行走而先做摩擦的话,那么初始状态就为0,那就相当于花费2格体力,获得较小的收益,显然不行。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod = 1e9+7;
int main(void)
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
ll ans=0;
scanf("%d",&n);
if(n&1) ans=1;
while(n>=2)
{
ans=(ans*2%mod+2)%mod;
n-=2;
}
printf("%lld\n",ans);
}
return 0;
}