【每日一题】12月15日题目精讲

题号 NC21884
名称 函数的魔法
来源 牛客练习赛35
戳我进入往期每日一题汇总贴~
往期每日一题二期题单

图片说明

如果你在题库做题时遇到了喜欢的题目,欢迎推荐给邓老师~ 点击查看详情
每日一题QQ群:659028468

题解

假设我们用一个邻接矩阵来表示计算步骤, 连接一条有向边代表 可以经过一次计算得到 ,也就是说,对于 以及 都连接一条有向边。这样就得到了一个 233*233 的邻接矩阵。
对于一个邻接矩阵而言,矩阵中的元素都是用0,1来表示是否联通的,或者说,代表有没有方法从走到。那么,就是表示从 走到 再走到 是否可行。可以发现, 其实就是统计用2步从 走到 的方法总数。
因此,可以预处理出 、…… 这些所有的邻接矩阵(很明显,最多计算232次就足够了)。之后每次询问的时候,复杂度在矩阵中遍历就可以了。
注意要特判两种情况:①a=b的时候,无论怎样直接输出0即可。②除第一种情况以外, 时显然无解,输出-1。
之后询问的时候可以用 在预处理得到的233个邻接矩阵中进行询问。
参考代码:

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
struct Matrix{
    int a[253][253];
};

long long f(long long x){
    return x*x*(x+1)%233;
}
long long g(long long x){
    return x*x*(x-1)%233;
}
Matrix f(Matrix a)
{
    int i,j,k;
    Matrix tmp;
    for(i=0;i<233;++i)
    {
        for(j=0;j<233;j++)
            if(a.a[i][j]==1)
        {
            tmp.a[i][f(j)]=1;
            tmp.a[i][g(j)]=1;
        }
    }
    return tmp;
}
  Matrix m[253];
int main()
{
    int i;
    for(i=0;i<233;i++)m[0].a[i][i]=1;
    for(i=1;i<=233;i++){
        m[i]=f(m[i-1]);
    }
    int t;
    cin>>t;
    while(t--){
        long long a,b;
        cin>>a>>b;
        if(a==b)cout<<"0"<<endl;
        else if(b>=233)cout<<"-1"<<endl;
        else{
            a%=233;
            for(i=1;i<=233;i++){
                if(m[i].a[a][b]==1)break;
            }
            if(i>233)cout<<-1<<endl;
            else cout<<i<<endl;
        }
    }
}

欢迎各位大佬来做题写题解,也欢迎大家踊跃在当日讨论贴中提问!

活动奖励:

在牛客博客中写出题解,并回复地址
审核通过可获得(依据题目难度和题解的内容而定)

本道题目12月22日中午12:00之前写的题解有获得牛币资格~

.牛币兑换中心

牛客博客开通方式

  1. 如何开通牛客博客:https://www.nowcoder.com/discuss/202952
  2. 如何使用博客搬家功能:进入博客--->设置--->底部博客搬家
  3. 如果你对牛客博客有任何意见或建议:牛客博客意见反馈专贴
全部评论
题解来哩 https://blog.nowcoder.net/n/a142761cbb8845fbb0f5f3dab759792a
2 回复 分享
发布于 2020-12-14 20:56
https://blog.nowcoder.net/n/bbf8c221b1f74bd9bbc576308e0c23f7
点赞 回复 分享
发布于 2020-12-19 14:09
https://blog.nowcoder.net/n/b524c1f94c1f469f840c0d0194e1449d
点赞 回复 分享
发布于 2020-12-16 12:04
官方题解的复杂度好优秀
点赞 回复 分享
发布于 2020-12-15 15:25
https://blog.nowcoder.net/n/068ab50bd09b47b895bdd28aa4f282d3
点赞 回复 分享
发布于 2020-12-14 20:38
https://blog.nowcoder.net/n/1da2fb1f693d4a05a434e36cf8f10938
点赞 回复 分享
发布于 2020-12-14 18:55
https://blog.nowcoder.net/n/45b361085a724facbb7bfd48c88d27d0
点赞 回复 分享
发布于 2020-12-14 15:48

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
2025-12-08 18:11
曲阜师范大学 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务