Code Forces 584 B. Kolya and Tanya(快速幂)
2015-10-10 09:42
330 查看
Description
有3*n个人围坐一个圆桌,第i个人手中有a[i]个硬币(1<=ai<=3),问a数组有多少种情况使得存在i,都有a[i]+a[i+n]+a[i+2n]≠6(0<=i < n)
Input
一个整数n
Output
输出满足条件的情况数,结果模1e9+7
Sample Input
1
Sample Output
20
Solution
所有情况有3^3n=27^n种,不合法情况是对任意i都有a[i]+a[i+n]+a[i+2n]=6,那么每个i都有123,132,213,231,312,321,222七种情况,所以不合法情况有7^n种,那么答案即为(27^n%mod-7^n%mod+mod)%mod
Code
有3*n个人围坐一个圆桌,第i个人手中有a[i]个硬币(1<=ai<=3),问a数组有多少种情况使得存在i,都有a[i]+a[i+n]+a[i+2n]≠6(0<=i < n)
Input
一个整数n
Output
输出满足条件的情况数,结果模1e9+7
Sample Input
1
Sample Output
20
Solution
所有情况有3^3n=27^n种,不合法情况是对任意i都有a[i]+a[i+n]+a[i+2n]=6,那么每个i都有123,132,213,231,312,321,222七种情况,所以不合法情况有7^n种,那么答案即为(27^n%mod-7^n%mod+mod)%mod
Code
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; #define mod 1000000007ll typedef long long ll; ll mod_pow(ll a,ll b,ll p) { ll ans=1ll; a%=p; while(b) { if(b&1) ans=(ans*a)%p; a=(a*a)%p; b>>=1; } return ans; } int main() { int n; while(~scanf("%d",&n)) printf("%I64d\n",(mod_pow(27ll,(ll)n,mod)-mod_pow(7ll,(ll)n,mod)+mod)%mod); return 0; }
相关文章推荐
- 第 5章 eval
- 免费开源的堡垒机
- 浮点数等值比较
- Ubuntu 安装AndroidStudio过程详解
- [LeetCode-92] Reverse Linked List II(反转指定区间链表)
- 20150923构造器的认识
- 第七章——函数
- 《The C Programming Language》阅读笔记1
- Java基础知识强化之集合框架笔记63:Map集合之HashMap嵌套ArrayList
- springmvc简介
- Android 众多的布局属性详解
- Python 数据库连接(sqlite, mysql, oracle, postgresql, sql server)
- iOS 苹果内购机制
- 读取、修改、保存图像
- 停下来面对,需要跟人交谈
- Visual Studio 常用快捷键的动画演示
- Android性能优化小集二
- 7 个顶级的 HTML5 Canvas 动画赏析
- JS实现的车标图片提示效果代码
- windows下C多线程