牛客网小白月赛8神秘钥匙

编程入门 行业动态 更新时间:2024-10-06 14:36:49

牛客网小白月赛8神秘<a href=https://www.elefans.com/category/jswz/34/1770011.html style=钥匙"/>

牛客网小白月赛8神秘钥匙

题目链接:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
clccle一行?个人来到了一个诡异的世界,她们需要去寻找逃出这个地方的方法——找到神秘的所罗门之匙
她们决定从中随机选出一些人去寻找钥匙,并在其中选出一个队长,clccle不想知道自己有多大几率被选中,她只想知道一共有多少种选择的方案 (选出的人数要在1−?之间,不同的队长算不同的方案)。
方案数对1000000007取模
输入描述:第一行,一个整数?。
输出描述:一个整数,表示方案数。
示例1
输入
2
输出
4
说明:四种方案:(1),(1,2)其中1是队长,(2,1),(2)其中2是队长
备注:1 ≤ ? ≤ 10的9次方

解析问题,发现一定要选一个队长,那就n种方案,剩下的人可以去可以不去就是2的n次方
总的选择方法:n*pow(2,n)

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
int main()
{int n;long long a=1;scanf("%d",&n);a=n;for(int i=0;i<n-1;i++){a*=2;a%=1000000007;}printf("%lld",a);}

直接求解,运行超时

那就减少复杂度,2的63次方会lld范围就用62次方,建议减少约62倍的计算

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
int main()
{int n;long long a=1,num62;scanf("%d",&n);num62= 4611686018427387904%1000000007;for(int i=0;i<n-1;){if(n-1-i>63){a=a*num62;a=a%1000000007;i+=62;}else {a*=2;i++;//printf("%lld\n",a);}}a=a%1000000007;//注意要先%一次,不然这里也有可能爆lld范围a*=n;//必须先计算上面的再计算这个,不然答案错误,这个道理很明显a=a%1000000007;printf("%lld",a);}

更多推荐

牛客网小白月赛8神秘钥匙

本文发布于:2024-02-28 14:05:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769839.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:钥匙   神秘   牛客网小   白月

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!