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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 教你如何选择以太坊ETH挖矿教程及挖矿分配模式

    教你如何选择以太坊ETH挖矿教程及挖矿分配模式现在,国内国外的矿池越来越多,挖矿难度也越来越大,对于矿工来说,又好又稳定的收益保障一直是追求的目标。以太坊ETH,全球第二大加密货币,对以太坊的追求者都有一种浓重的信仰与情怀,特别是最近消息称以太坊2.0即将来临,更加的激动人心。但最终的目的也是要获得收益,影响收益最大的因素就是矿池收益分配模式,现在矿池收益分配模式有:PPS、PPLNS、PPS+、FPPS等。那么,对于挖以太坊ETH来说…

    2022年6月7日
    65
  • CreateThread()与_beginthread()的区别详细解析

    很多开发者不清楚这两者之间的关系,他们随意选一个函数来用,发现也没有什么大问题,于是就忙于解决更为紧迫的任务去了。等到有一天忽然发现一个程序运行时间很长的时候会有细微的内存泄露,开发者绝对不会想到是因为这两套函数用混的结果我们知道在Windows下创建一个线程的方法有两种,一种就是调用WindowsAPICreateThread()来创建线程;另外一种就是调用MSVC…

    2022年4月4日
    55
  • 正则化的作用以及L1和L2正则化的区别

    正则化的作用以及L1和L2正则化的区别0正则化的作用正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归。但是使用正则化来防止过拟合的原理是什么?L1和L…

    2022年7月13日
    13
  • pgrouting 路径规划_路径分析是什么意思

    pgrouting 路径规划_路径分析是什么意思一.技术背景,相关技术介绍   PgRouting是基于开源空间数据库PostGIS用于网络分析的扩展模块,最初它被称作pgDijkstra,因为它只是利用Dijkstra算法实现最短路径搜索,之后慢慢添加了其他的路径分析算法,如A算法,双向A算法,Dijkstra算法,双向Dijkstra算法,tsp货郎担算法等,然后被更名为pgRouting[1]。该扩展库依托PostGIS自身的g…

    2022年8月24日
    4
  • 截图文字识别+翻译

    截图文字识别+翻译截图文字识别+翻译importpytesseractimportrequests,json,osfromPILimportImagefile_path=os.listdir(“./pic”)foriinfile_path:path=”./pic/”+iimage=Image.open(path)vcode=pytesseract….

    2022年5月1日
    50
  • densenet详解_densenet包

    densenet详解_densenet包DenselyConnectedConvolutionalNetworks,作者清华姚班的刘壮,获得cvpr2017bestpaper。非常值得阅读。DenseNet优势:(1)解决了深层网络的梯度消失问题(2)加强了特征的传播(3)鼓励特征重用(4)减少了模型参数DenseNet的网络基本结构如上图所示,主要包含DenseBlock和transitionlaye…

    2022年9月28日
    3

发表回复

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

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