zjzj只爱数学--一道很厉害的题目(原创)

题目背景

z j z j zjzj zjzj 大佬最喜欢的,就是找到一些红的数学题,把他们改变成蓝的,紫的,甚至黑的。

题目描述

有一天, z j z j zjzj zjzj 大(jù)佬(ruò) 看到了 f x t fxt fxt 蒟(dà)蒻(lǎo)出的一道题 : : : w a n g s h e n g j u n 33 wangshengjun33 wangshengjun33 275307894 a 275307894a 275307894a (大佬) 和 A _ r s j A\_rsj A_rsj (大佬) 以及一坨人在玩石头剪子布。玩着玩着,三人感觉不对劲,人越多越决不出胜负,他们想知道有几种可能决不出胜负。 (注意,本题不计顺序。不计顺序:例如甲出石头,乙出剪刀,丙出布与甲出布,乙出石头,丙出剪刀是同一种可能)

于是 z j z j zjzj zjzj 大(jù)佬(ruò) 把这道题改成了另一道题 : : : 有一坨人在玩游戏,每个人可以出 a , b , c , d a,b,c,d abcd 的任意一种,规定只有 a , b , c , d a,b,c,d abcd 同时出现时才会决不出胜负,问有多少种可能决不出胜负,同样也是不记顺序。

z j z j zjzj zjzj 大(jù)佬(ruò)又觉得这道题太简单了,于是又改了改 : : : 有一坨人在玩游戏,每个人可以出 a , b , c , d , e ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ a,b,c,d,e······ abcde 总共 k k k 种中的任意一种,规定只有同时出现 k k k 种时才会决不出胜负,问有多少种可能决不出胜负,同样也是不记顺序。

z j z j zjzj zjzj 大(jù)佬(ruò)又觉得太简单了,然后又改了改 : : : 规定有 n n n 个人,可以出 k k k 种时的答案为 f ( k , n ) f(k,n) f(k,n),求

∑ i = 1 n f ( i , n ) \sum_{i=1}^{n}f(i,n) i=1nf(i,n)

z j z j zjzj zjzj 大(jù)佬(ruò)给这道题评了个橙标签,所以这是第一题 q w q qwq qwq

输入格式

一个数 : : : n n n

输出格式

一个数,为那个式子的答案 % 1152921504606846975 \%1152921504606846975 %1152921504606846975

输入输出样例
输入 #1 复制
2
输出 #1 复制
2
说明/提示

对于 20 % 20\% 20% 的数据, 1 ≤ n ≤ 5 1\leq n\leq5 1n5

对于 40 % 40\% 40%的数据, 1 ≤ n ≤ 10 1\leq n\leq10 1n10

对于 60 % 60\% 60%的数据, 1 ≤ n ≤ 5000 1\leq n\leq5000 1n5000

对于 80 % 80\% 80%的数据, 1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1n105

对于 100 % 100\% 100%的数据, 1 ≤ n ≤ 5 × 1 0 1 0 7 1\leq n\leq5\times10^{10^7} 1n5×10107

思路

这道题嘛,有点意思。

首先,我们换一个 n n n,变成 5 5 5,则一定要这样:

i i i 的值
1a
2ab
3abc
4abcd
5abcde

这样,每一局就已经可以分不出胜负

然后我们只要求剩下的空还可以填的方案数总和

然后,我先把后面的一些排个序,就是这样的: a , . . . , a , b , . . . , b , c , . . . , c . . . a,...,a,b,...,b,c,...,c... a,...,a,b,...,b,c,...,c...,再用数学建模的思想,把切换字母看成横坐标+1,把加一个数看成纵坐标加一,这样就可以得出 f i , j = f i − 1 , j + f i , j − 1 f_{i,j}=f_{i-1,j}+f_{i,j-1} fi,j=fi1,j+fi,j1

这不就是一个杨辉三角吗

那么要求的东西刚好就是同一层的杨辉三角的和

因为杨辉三角是求 ( a ± b ) n − 1 (a±b)^{n-1} (a±b)n1的各项的系数,所以如果把它展开就是 ( a ± b ) ( a ± b ) . . . ( a ± b ) (a±b)(a±b)...(a±b) (a±b)(a±b)...(a±b),所以系数和就是总的展开的项的个数 ( 没有合并 ) ,所以系数和就是 2 n − 1 2^{n-1} 2n1

或者,用另一种易懂的方法,就是展开后,我们让每一项的字母的乘积都为1,那么这个系数的总和就是这个式子的值,那么这样的话, a , b a,b a,b就要等于1,系数和就是 2 n − 1 2^{n-1} 2n1

所以,只要求 2 n − 1 2^{n-1} 2n1 的值就可以了(绕了多大的弯啊)

那么,这样还是只有 80 80 80 分,所以,看一下这个模数 1152921504606846975 1152921504606846975 1152921504606846975,就是 2 60 − 1 2^{60}-1 2601 所以,当 n = 61 n=61 n=61 时,这个值又回到了当 n = 1 n=1 n=1 的时候,所以这样就可以不用这么大的复杂度了

只需要求 2 ( n − 1 ) % 60 2^{(n-1)\%60} 2(n1)%60的值就可以了

比如说我们想要求 623421 % 60 623421\%60 623421%60 的值

          10309 \ \ \ \ \ \ \ \ \ 10309          10309
60 623421 ‾ 60\sqrt{}\overline{623421} 60 623421
        60       ‾ \ \ \ \ \ \ \ \underline{60\ \ \ \ \ }        60     
           23    \ \ \ \ \ \ \ {\ \ 23\ \ }          23  
             0       ‾ \ \ \ \ \ \ \ \ \ \underline{\ \ 0\ \ \ \ \ }            0     
           234 \ \ \ \ \ \ \ {\ \ 234}          234
          180      ‾ \ \ \ \ \ \ \ \ \ \underline{180\ \ \ \ }          180    
             54 \ \ \ \ \ \ \ \ \ {\ \ 54}            54
            0          ‾ \ \ \ \ \ \ \ \ \ \ \ \underline{0\ \ \ \ \ \ \ \ }            0        
             542 \ \ \ \ \ \ \ \ \ {\ \ 542}            542
            540       ‾ \ \ \ \ \ \ \ \ \ \ \ \underline{540\ \ \ \ \ }            540     
                 21 \ \ \ \ \ \ \ \ \ {\ \ \ \ \ \ 21}                21

然后如何实现呢?

  1. 输入6,k=6
  2. 输入2,k=62%60=2
  3. 输入3,k=23%60=23
  4. 输入4,k=234%60=54
  5. 输入2,k=542%60=2
  6. 输入1,k=21%60=21

代码

#include<bits/stdc++.h>
using namespace std;
unsigned long long a=1,mod=1152921504606846975;
char c;
int n;
int main(){
	c=getchar();
	while(c>='0'&&c<='9'){n=(n*10+c-'0')%60;c=getchar();}
	for(int i=1;i<n;i++)a*=2;
	cout<<a;
	return 0;
}

谢谢–zhengjun

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_zjzj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值