牛客每日练习----wyh的数列,组合数问题,zzy的小号

我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力。                                      ----喻言

链接:https://ac.nowcoder.com/acm/problem/15448
来源:牛客网

题目描述

wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2)

一天他突发奇想,想求F(a^b)%c

输入描述:

输入第一行一个整数T(1<=T<=100),代表测试组数
接下来T行,每行三个数 a,b,c (a,b<=2^64) (1 
  

输出描述:

输出第a^b项斐波那契数对c取余的结果

示例1

输入

复制

3
1 1 2
2 3 1000
32122142412412142 124124124412124 123

输出

复制

1
21
3
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef unsigned long long ll;
using namespace std;
const int mod=1e9+7;  
const int NM=1000100;
ll t,a,b,c,p,f[NM];
ll ksm(ll a,ll b)
{
    ll ans=1;
    a=a%p;
    while(b)
    {
        if(b&1)
            ans=(ans*a)%p;
        a=(a*a)%p;
		b>>=1;
       
    }
    return ans;
}
int main()
{
    scanf("%lld",&t);
    while(t--)
    {
        f[0]=0;
        f[1]=1;
        scanf("%llu%llu%llu",&a,&b,&c);
        for(int i=2; i<=1000100; i++)
        {
            f[i]=(f[i-1]+f[i-2])%c;
            if(f[i-1]==0&&f[i]==1)
            {
                p=i-1;
                break;
            }
        }
        printf("%llu\n",f[ksm(a,b)]);
    }
    return 0;
}

链接:https://ac.nowcoder.com/acm/problem/15475
来源:牛客网

题目描述

众所周知,小葱同学擅长计算,尤其擅长计算组合数,所以小葱给了你两个数x和k,希望你把x分成恰好k个不同的组合数的和。所谓不同,即对于两个组合数C(n1,m1)和C(n2,m2),如果n1≠n2或者m1≠m2,我们就称这两个组合数是不同的。为了使得计算不过于复杂,你需要保证你给出的任何一个组合数C(n,m)满足0≤m≤n≤x。数据保证一定有解。

输入描述:

第一行两个整数 x,k。

输出描述:

k行,每行两个整数 n,m 代表一个组合数 C(n,m)。如果有多种可能的答案,任意输出一组即可。

示例1

输入

复制

6 2

输出

复制

3 1
3 2

备注:

对于 20% 的数据,k=1。
对于另外 20% 的数据,x≤ 100。
对于另外 20% 的数据,k=2。
对于 100% 的数据, 1≤ x≤ 109,1≤ k≤ 103。
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=1e9+7;  
const int NM=5e3+10;
int x,k;
int main(){
    cin>>x>>k;
    cout<

链接:https://ac.nowcoder.com/acm/problem/15494
来源:牛客网

题目描述

学家zzy根据字体的特点,创建了一系列小号...  I_Love_Chtholly!

又到了打wannafly的时候,许许多多的大佬准备注册小号开始虐场,zzy也不例外,他发现他的电脑的字体有一个特点!某些不同的字符所显示的是一样的!

满足以下四种情况之一,所显示的字符是一样的

1、两个字符互为英文字母的大小写

2、大写的'i'和小写的'l'

3、大写的'o'和数字'0'

4、基于前三种情况,三个字符a,b,c,如果a和b显示相同,b和c显示相同,那么a和c显示也是相同的

珂学家zzy想知道,对于一个他看起来相同的昵称,有多少个看起来一样的昵称

两个字符串看起來一样当且仅当长度一样且每个对应的位置的字符看起來一样

输入描述:

一个字符串,只包含大小写字母和数字

输出描述:

共一行一个整数,表示看起来一样的昵称数,由于这个数比较大,所以只要求输出模1e9 + 7意义下的解

示例1

输入

复制

abcdl

输出

复制

64

说明

第一个位置、第二个位置、第三个位置、第四个人位置都只有两种显示相同的字符
第五个位置有四种显示相同的字符

备注:

字符串长度1<=|S|<=1e5
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=1e9+7;  
const int NM=5e3+10;
ll jg=1;
string s;
int main()
{    
    cin>>s;
    int cd=s.size();
    for(int i=0;i='a')||(s[i]<='Z'&&s[i]>='A')) 
			jg=jg*2%mod;
    }
    cout<

你可能感兴趣的:(牛客网)