upc 训练赛 第九场 问题 G: 似魔鬼的步伐(思维题)

[提交] [状态] [命题人: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

#include<cstdio>
#include<iostream>
#include<algorithm>
typedef long long ll;
const int mod = 1e9+7;
ll fiction;
using namespace std;

void get(int n)
{
    while(n>0)
    {
        if(n%2!=0)
        {
            n--;;
            fiction=fiction*1+1;
            fiction%=mod;
        }
        else
        {
            n-=2;
            fiction=fiction*2+2;
            fiction%=mod;
        }
    }

    cout<<fiction<<"\n";
}

int main()
{
    int k,n,cnt=0;
    cin>>k;

    while(cnt<k)
    {
        fiction=0;
        cin>>n;
        get(n);
        cnt++;
    }
    return 0;
}

思路:首先,因为摩擦对摩擦力的影响是走路对摩擦力的影响的两倍,所以首先考虑摩擦这种方式。但是呢,有可能体力是奇数,这样就会有多的一点体力。所以,当体力值为奇数时,应该先用一次行走,当体力值为偶数时,都用摩擦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值