HDU – 5187 – zhx's contest (高速幂+高速乘)

HDU – 5187 – zhx's contest (高速幂+高速乘)

大家好,又见面了,我是全栈君。

zhx’s contest

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 448    Accepted Submission(s): 147




Problem Description
As one of the most powerful brushes, zhx is required to give his juniors 



n
 problems.

zhx thinks the 



ith
 problem’s difficulty is 



i
. He wants to arrange these problems in a beautiful way.

zhx defines a sequence 



{ai}
 beautiful if there is an 



i
 that matches two rules below:

1: 



a1..ai
 are monotone decreasing or monotone increasing.

2: 



ai..an
 are monotone decreasing or monotone increasing.

He wants you to tell him that how many permutations of problems are there if the sequence of the problems’ difficulty is beautiful.

zhx knows that the answer may be very huge, and you only need to tell him the answer module 



p
.
 


Input
Multiply test cases(less than 



1000
). Seek 



EOF
 as the end of the file.

For each case, there are two integers 



n
 and 



p
 separated by a space in a line. (



1n,p1018
)
 


Output
For each test case, output a single line indicating the answer.

 


Sample Input
   
   
2 233 3 5

 


Sample Output
   
   
2 1
Hint
In the first case, both sequence {1, 2} and {2, 1} are legal. In the second case, sequence {1, 2, 3}, {1, 3, 2}, {2, 1, 3}, {2, 3, 1}, {3, 1, 2}, {3, 2, 1} are legal, so the answer is 6 mod 5 = 1

 


Source
 

思路:由题意能够求出答案为(2^n-2)%p


可是n。p都是LL型的,高速幂的时候会爆LL,所以这里要用到高速乘法,高速乘法事实上和高速幂差点儿相同。就是把乘号改为加号


注意:当n为1时。要输出1,而当p为1时要输出0。


AC代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long 
using namespace std;

LL n, p;

LL multi(LL a, LL b) {	//高速乘法。事实上和高速幂差点儿相同 
    LL ret = 0;
    while(b) {
        if(b & 1) ret = (ret + a) % p;
        a = (a + a) % p;
        b >>= 1;
    }
    return ret;
}

LL powmod(LL a, LL b) {	//高速幂 
    LL ret = 1;
    while(b) {
        if(b & 1) ret = multi(ret, a) % p;
        a = multi(a, a) % p;
        b >>= 1;
    }
    return ret;
}


int main() {
	while(cin >> n >> p) {
		if(p == 1) {
			cout << 0 << endl;
		} else if(n == 1) {
			cout << 1 << endl;
		} else {
			LL ans = powmod(2, n) - 2;
			if(ans < 0) ans += p;
			cout << ans << endl;
		}
	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115513.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python append 函数[通俗易懂]

    Python append 函数[通俗易懂]pythonappend描述append函数可以在列表的末尾添加新的对象。函数无返回值,但是会修改列表。append语法list.append(object)名称 说明 备注list 待添加元素的列表 object 将要给列表中添加的对象 不可省略的参数append举例1.给列表中添加整数、浮点数和字符串:test=[‘Python’,‘C’,‘Java’]test.append(5)test.append(23.6)test.append(‘HTML’)print(t

    2022年6月16日
    90
  • Spring源码下载地址

    Spring源码下载地址https://github.com/spring-projects/spring-framework

    2022年8月12日
    6
  • QueryInterface详解 COM

    QueryInterface详解 COMQueryInterface接口查询IUnknown:      所有的COM接口均需要继承IUnknown接口。因此,若某个用户拥有一个IUnknown接口指针,它并不需要知道它所拥有的接口指针到底是什么类型的,而只需要通过此接口就可以用来查询其他接口就行了。      由于所有的COM接口都继承了IUnknown,每个接口的vbtl的前三项都是QueryInterface,A

    2022年6月29日
    30
  • python进阶(7)垃圾回收机制

    python进阶(7)垃圾回收机制前言现在的高级语言如java,c#等,都采用了垃圾回收机制,而不再像c,c++里,需要用户自己管理内存。自己管理内存及其自由,可以任意申请内存,但这如同一把双刃剑,可能会造成内存泄漏,空指针等bug

    2022年7月28日
    6
  • 【转】下载太慢?简单设置让iTunes提速十几倍「建议收藏」

    【转】下载太慢?简单设置让iTunes提速十几倍「建议收藏」原文网址:http://www.startos.com/mac/ipad/tips/2010120713291.html今年可以说是苹果欢笑的一年,ipad的发布,iphone4的成功,让用苹果设备

    2022年8月6日
    9
  • Oracle建立表空间和用户

    Oracle建立表空间和用户

    2021年12月10日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号