暑期个人赛--第三场--D

时间限制 1000 ms  内存限制 65536 KB

题目描述

田田申请了一个新的oj账号,打算取一个霸气而简单的名字。 什么叫简单呢?说白了田田脑子不好使,只能记住abcd这4个字母组成单词。 怎么叫霸气呢?田田认为a个个数一定要有奇数个,b的个数一定要有偶数个(包括0)才可以。 现在田田取了一个长为n的账号,但是由于田田的记性实在太差了,而把账号忘记了. 于是把这个问题交给了聪明的wzt,而他认为这道题太过于简单就把这道题交给了你 究竟这个账号有多少种可能?你只需得到这个结果模 109+7 的值

输入格式

多组case,第一行为case数 T ,之后 T 行每行一个整数 n 。  1n109 T100

输出格式

一个case对应一行输出

输入样例

2
1
2

输出样例

1
4

赛中提交:NULL

赛后AC:YES


题目大意:

用abcd这4个字母组成单词

a个个数一定要有奇数个,b的个数一定要有偶数个(包括0)

给出单词长度n,求其符合条件的排列组合数


反省:

以后一见到这种明显也许会有规律类型的题目一定要先打表看看规律...


解法:

暴力打表(或者甚至笔算),之后就可以发现答案就是4的n-1次方...

因此用上一个快速幂算法就可以解决了



下面是ac代码

#include "iostream"
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string"
#include "vector"
#include "list"
#include "map"
#include "queue"
#include "stack"
#include "bitset"
#include "algorithm"
#include "numeric"
#include "functional"
#define mod (1000000000+7)
 
using namespace std;
typedef long long ll;
 
ll qpow(ll x,ll n)
{
    if(n==0) return 1;
    ll res=qpow(x*x%mod,n/2);
    if(n&1) res=res*x%mod;
    return res;
}
 
int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        ll n,x=4;
        scanf("%lld",&n);
        printf("%lld\n",qpow(x,n-1));
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值