冰墩墩与颜色 | ||
Accepted : 58 | Submit : 694 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB | |
冰墩墩与颜色题目描述冰墩墩喜欢丰富多彩的颜色,TA想把一个1×n的格子都涂上“RGB”中的某一种颜色,但是要保证有且仅有一组相邻的格子是同色的。 TA想知道一共有多少组涂色方案? 输入格式第一行是一个整数T (1≤T≤1000),表示样例的个数。 以后每行一个整数n (2≤n≤106), 表示格子的数量 输出格式每行输出一个样例的结果,为一个整数,由于值可能很大,请将结果对109+7取模。 样例输入3 2 3 4 样例输出3 12 36 |
Source Code
Problem: 1516 User: 202205567311
Memory: 1432K Time: 0MS
Language: G++ Result: Accepted
Source Code
#include<stdio.h>
#define MOD 1000000007
long long quickpow2(int a)//快速幂,去学一下比较好
{
long long gg;
if (a == 1) return 2;
if (a % 2)
{
gg=quickpow2((a - 1) / 2) % MOD;
return 2 * gg*gg % MOD;
}
else
{
gg=quickpow2(a / 2) % MOD;
return gg*gg % MOD;
}
}
int main()
{
int t, i, input;
long long sum;
scanf("%d", &t);
while (t--)
{
sum = 0;
scanf("%d", &input);
if (input == 2)
{
printf("3\n");
continue;
}
sum = 3;
sum = sum * quickpow2(input - 2) % MOD;//纯纯一道数学题,属于朱昊鲲2000里的进阶版(doge) 其实原理很简单,就是高中的涂色题,不考虑条件就是3X2X2X2......
n个空有n-1个把颜色定位的方案,然后对于每种方案都是3X2X2....X1(确定下来的一个)
sum = (sum * (input - 1)) % MOD;
printf("%d\n", sum);
}
return 0;
}