poj 5187(单调序列问题+快速乘)
2015-04-19 12:01
127 查看
/* 题意:给1~n,求n个数组成的排列满足先增后减或先减后增或单调递增递减的个数 思路:第i相对于前i-1个是最大的,所以前i-1个数先增后减或先减后增序列基础上第i个数都有两个位置可放置, 而单调增减只能放到第一个和最后的位置。所以是2的n次方-2种方案。 但要注意:n=1,输出1,p=1 输出0,且先要判断p 求2的n次方用到快速乘法,因为两个ll类型乘超ll范围 */ #include<iostream> #include<string.h> #include<stdio.h> using namespace std; #define ll long long ll n,p; ll mul(ll a,ll b){ ll res=0; while(a){ if(a&1){ res=(res+b)%p; } b=b*2%p; a>>=1; } return res; } ll poww(ll x,ll k){ ll res=1; while(k){ if(k&1){ res=mul(res,x); } x=mul(x,x); k>>=1; } return res; } int main() { while(~scanf("%I64d%I64d",&n,&p)){ if(p==1) printf("0\n"); else if(n==1) printf("1\n"); else{ ll res=poww(2,n)-2; if(res<0) res+=p; printf("%I64d\n",res); } } return 0; }
相关文章推荐
- POJ--2823--Sliding Window----单调队列问题
- NYOJ 79 & 17 & 214 单调最长子序列问题(DP)
- 最长单调递增子序列问题
- Poj 1077 eight(BFS+全序列Hash解八数码问题)
- bzoj1345 [Baltic2007]序列问题Sequence 单调栈
- POJ 3420 Quad Tiling (瓷砖问题+矩阵快速幂)
- POJ 3734 (矩阵快速幂+染色问题)
- POJ 1887 Testing the CATCHER 最长不下降序列(LIS)问题
- poj 3017 dp+单调队列(拆分序列)
- NYOJ 79 & 17 & 214 单调最长子序列问题(DP)
- poj 3984 迷宫问题(bfs 输出序列)
- 小明系列问题——小明序列(Lis 相距大于d的单调上升子序列)
- POJ - 1065 Wooden Sticks(DP 子序列问题)
- POJ 2823 (从经典滑动窗口最大值问题入门单调队列)
- Poj 1077 eight(BFS+全序列Hash解八数码问题)
- 【POJ 3162】 Walking Race (树形DP-求树上最长路径问题,+单调队列)
- 【BZOJ1345】[Baltic2007]序列问题Sequence 贪心+单调栈
- 最长单调递增子序列问题
- POJ 1952 BUY LOW BUY LOWER 【DP】最长降序子序列及其计数问题
- poj 2479 Maximum sum (子序列和最大问题)