hdu 5187 阴险的爆掉long long
来源:互联网 发布:淘宝代运营十大排名 编辑:程序博客网 时间:2024/05/01 13:50
BestCoder第33场上的第二题,表示虽然推出了公式,即:
对于n = 1时,ans = n % p(因为p可能为1,所以不能直接写ans = 1);
对于n > 1时,ans = 2 ^ n - 2。
具体公式的推法这里引用出题人laekov的原话:
对,没错,就是因为p是2的31次幂,当直接采用快速幂的话,会超long long。1002 zhx and contest如果n=1 ,答案是1 ,否则答案是2n−2 。证明:ai 肯定是最小的或者最大的。考虑另外的数,如果它们的位置定了的话,那么整个序列是唯一的。那么ai 是最小或者最大分别有2n−1 种情况,而整个序列单调增或者单调减的情况被算了2次,所以要减2。要注意的一点是因为p>231 ,所以要用快速乘法。用法与快速幂相同。如果直接乘会超过long long范围,从而wa掉。
【于是就都是眼泪了TAT~,总之还是太年轻】
AC代码:
#include <iostream>#include <cstdio>using namespace std;typedef long long LL;inline LL Fast_mult(LL x, LL y, LL p) { LL t=0; for(; y; y>>=1,x=(x+x)%p) if(y&1)t=(t+x)%p; return t;}inline LL power(LL x, LL y, LL p) { LL t=1; for(; y; y>>=1,x=Fast_mult(x,x,p)%p) if(y&1)t=Fast_mult(t,x,p); return t;}int main() { LL n, p; while(~scanf("%I64d%I64d", &n, &p)) { if(n == 1) printf("%I64d\n", n % p); else printf("%I64d\n",(power(2, n, p) - 2 + p) % p); } return 0;}
0 0
- hdu 5187 阴险的爆掉long long
- Long Long 的使用
- hdu 5446 Lucas定理,中国剩余定理,处理爆long long 的乘法取模运算
- Long
- int ,long , long long类型的范围
- int ,long , long long类型的范围
- int ,long , long long类型的范围
- int ,long , long long类型的范围
- int 、long 、long long 的表示范围
- int ,long , long long类型的范围
- int,long,long long,__int64的范围
- INT ,LONG , LONG LONG类型的范围
- int ,long , long long类型的范围
- int ,long , long long类型的范围
- int ,long,long long 的范围
- int ,long , long long类型的范围
- int、long、long long的范围
- int ,long , long long的最大最小值
- gets() 函数
- **.sql文件导入mysql数据库
- 第二周上机项目1旱冰场造价
- 【解决】MyEclipse控制台中文乱码(使用Tomcat)
- js中json的相关知识及操作
- hdu 5187 阴险的爆掉long long
- Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
- 常用缩略词
- “大数处理“
- 【Android】创建自定义复合控件
- linux配置vim
- ZYNQ 开发
- 基金收益 净值计算
- PLSQL developer 配置连接 instantclient_10_2