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

来源:互联网 发布:西科软件 编辑:程序博客网 时间:2024/05/29 09:41

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

题目描述

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

输入格式

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

输出格式

一个case对应一行输出

输入样例

212

输出样例

14

赛中提交: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));    }}




0 0
原创粉丝点击