poj 3734 Blocks

来源:互联网 发布:网络歌手苏琛照片 编辑:程序博客网 时间:2024/05/16 19:08

ゲート

分析:这题过的人好多,然后大家好像是用矩阵过的(((φ(◎ロ◎;)φ)))。我自己是推公式的。
对于任意的N有这个式子Ni=2((iN)i/2j=0(2ji)2Ni)+2N, 就是先从里面选偶数个涂成两个指定的颜色,再在选出的里面选定涂某种颜色,选剩下的在剩下的两种颜色里任选。注意两种指定颜色都不选是特殊情况。式子化简下来是22N2+2N1

代码:

/*****************************************************///#pragma comment(linker, "/STACK:1024000000,1024000000")#include <map>#include <set>#include <ctime>#include <stack>#include <queue>#include <cmath>#include <string>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <sstream>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;#define   offcin        ios::sync_with_stdio(false)#define   sigma_size    26#define   lson          l,m,v<<1#define   rson          m+1,r,v<<1|1#define   slch          v<<1#define   srch          v<<1|1#define   sgetmid       int m = (l+r)>>1#define   LL            long long#define   ull           unsigned long long#define   mem(x,v)      memset(x,v,sizeof(x))#define   lowbit(x)     (x&-x)#define   bits(a)       __builtin_popcount(a)#define   mk            make_pair#define   pb            push_back#define   fi            first#define   se            secondconst int    INF    = 0x3f3f3f3f;const LL     INFF   = 1e18;const double pi     = acos(-1.0);const double inf    = 1e18;const double eps    = 1e-9;const LL     mod    = 10007;const int    maxmat = 10;const ull    BASE   = 31;/*****************************************************/LL qpow(LL a, LL b) {    LL res = 1;    while (b) {        if (b & 1) res = a * res % mod;        b >>= 1;        a = a * a % mod;    }    return res;}int main(int argc, char const *argv[]) {    int T;    cin>>T;    while (T --) {        int N;        scanf("%d", &N);        LL res = (qpow(2, 2 * N - 2) + qpow(2, N - 1)) % mod;        printf("%lld\n", res);    }    return 0;}
0 0