米哈游后端笔试题解

第一题是算联通块,两次dfs即可,太简单,不细说了

第二题 算添加删除mhy的,也挺简单的,不说了

第三题:

给你一个n的数组a,数组中元素不重复,1<= 元素大小 <=1000000

n为 [1,100000]

求从数组中挑选多于一个元素的子集(至少两个元素),使得子集中元素两两为倍数关系

的方案数 (mod 1000000007)

解法:

把数组a递增排序

预处理这个数组间 的倍数关系 (nlog1000000)

再nlog 去dp一下

dp含义 :sum[x]表示以x元素作为结尾的方案数

转移方程:(条件:a中存在u,且a[i]是u倍数,u!=a[i])

sum[a[i]] += sum[u]+1;

代表u结尾的所有合法子集均添加一个a[i] 的方案数: sum[u]

以及单一个u的集合加 a[i] 也能构成新的合法集合的方案数: 1

故u对a[i]的贡献为 sum[u]+1

记得mod一下 :sum[a[i]]=(sum[a[i]]+sum[u]+1)%mod;

最后,c++ 代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
int n;
int a[1000007];
vector<int>r[1000007];
ll sum[10000007];
bool vis[1000007];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",a+i);
        vis[a[i]]=1;
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=1000000;i++){
        if(vis[i]==0)continue;
        for(int j=i+i;j<=1000000;j+=i){
            if(vis[j])r[j].push_back(i);
        }
    }
    for(int i=2;i<=n;i++){
        for(auto u:r[a[i]]){
            if(vis[u])sum[a[i]]=(sum[a[i]]+sum[u]+1)%mod;
        }
    }
    ll ans=0;
    for(int i=1;i<=n;i++){
        ans=(ans+sum[a[i]])%mod;
    }
    cout<<ans;
}

全部评论
“太简单了”太打击人了,我和大佬的区别
13 回复 分享
发布于 2023-03-19 22:48 北京
大佬a了吗,第一题dfs会直接爆栈35,并查集用python40%,第二题搜索只能20%,最后一题dp不一样,n方过了20%
2 回复 分享
发布于 2023-03-19 22:55 美国
电脑上写的,电脑网页端看排版挺好的 发现手机上看换行全乱了,唉,将就着看吧,反正代码不会乱
1 回复 分享
发布于 2023-03-19 22:40 湖南
请教一下,初始化r的时候,可不可以把 i 和 j 对调,写成 if(vis[i]) r[i].push_back(j);
点赞 回复 分享
发布于 2023-03-21 11:13 江苏
一二题还算简单,第三题就没啥思路了,想到要先预处理成倍数的,但是感觉后面连不上去,就只随便交了一个
点赞 回复 分享
发布于 2023-03-20 17:07 湖南
佬现在投递状态变了吗
点赞 回复 分享
发布于 2023-03-20 13:56 湖北
没一题a的
点赞 回复 分享
发布于 2023-03-20 09:38 江苏
题目不一样哎
点赞 回复 分享
发布于 2023-03-19 23:10 江苏
大佬
点赞 回复 分享
发布于 2023-03-19 22:40 江苏
点赞 回复 分享
发布于 2023-03-19 22:30 重庆

相关推荐

有很多问题,求大佬们解答,谢谢大佬们:不知道现在该怎么投实习,该怎么准备内心很纠结学校课程和实习到底怎么选择,&nbsp;自己也不想课程学业这边出问题,&nbsp;是不是只能投暑期实习,具体时间该怎么安排前端面试也需要准备算法么,&nbsp;自己的算法能力很薄弱,&nbsp;面试题需要准备到什么程度?没有ai项目经验的话,我该如何去补充,如何去找好的ai项目
smile丶snow:1.简历尽量一页,比如教育经历那里,全日制,计算机学院这些可以去掉没啥用好浪费空间。 熟悉三件套就没必要写了吧。js基本上是这样写 * JavaScript核心:深入理解 JS 运行机制(事件循环 Event Loop、微任务/宏任务),熟练掌握 Promise/Async 异步编程 模型。 熟悉可以改成熟练掌握。组件库写一个ant感觉就行,多写了浪费空间。 旅游项目是不是jonas的natours啊,我之前简历也有这个。我之前是这样写的 全栈思维: 熟悉 Node.js/Express 后端架构,掌握 MongoDB 数据库设计与聚合查询 工程化我觉得还是少些吧,不写就问的少,如果你真的了解的话可以写。 1.实习的话推荐大厂官网和aoob上面投,我自己有写一个校招网站的小网站可以直达~github主页上面有,顺便求个关注( 2.大三下一般课程比较少了吧,如果学校比较严的话可以多沉淀一会,如果不太严可以请dai课然后去实习,尽量找个近一些的就行。暑期实习不是暑假才实习哦,基本是上3月底4月初发offer就可以过去了,然后大概暑假的时候走转正流程答辩。 3.大厂算法题+js手写体。hot100+常见的比如数组转树,Promise.all,deepClone,之类 js手写都不难其实。算法看自己能力吧,我其实算法能力也不行。 4.自己平时没有用AI Coding吗?自己想一下怎么让AI帮你更好的写代码~比如Skill的诞生,OpenSpec的诞生,不都是我们想让AI更好帮我们写代码吗。
我的实习日记
点赞 评论 收藏
分享
03-24 13:24
已编辑
江西农业大学 后端工程师
最近或许大家都听说xxxx厂裁员,无论前端,后端,大数据,测试,运维,人人可危,&nbsp;“前端死了,后端也死了,JAVA崩盘了,你们这群搞大模型的真是码奸”这次AI真的会让我们无路可走吗????????太阳底下已经没有新鲜事了旧的生产力的消失,必然有新的生产力诞生马车夫消失&nbsp;→&nbsp;汽车司机、修车工、石油工业诞生,从业人数是马车夫的百倍手工纺织女工消失&nbsp;→&nbsp;纺织机械工程师、面料设计师诞生,纺织品产量提升百倍2007年苹果开放&nbsp;App&nbsp;Store,&quot;移动端开发者&quot;这个职业压根不存在。八年后,全球应用经济规模突破&nbsp;1000亿美元,凭空诞生了数百万开发者岗位。每一次&quot;这次真的完了...
二十岁的编程男神王大...:那这个时代是什么时代呢? 是全员agent的时代,是前端+AI,后端+AI的时代,AI已经融入了项目生命周期的的每一个角落,那我最近在做的东西举例,检查BUG时,我们会用codex,CC等工具的skill去check,效果好还能直接fix,测试的时候,apifox等工具已经有了AI落地的改造,CI/CD阶段,我们会根据hook去跑AI check脚本,就连不少中间件,也迎来了AI落地的改造,(AI网关,AI在MQ中的运用),都可以去了解下 另外记着,这些东西不是意义,工作只是谋生的一个手段,ai是让开发提效了,但是呢,原先一周的工作流程压缩到了两天内,同时低级的都裁员了,只有高级的去维护,你看似写的大义凛然,或许那天你也会成为你文章里面拒绝往前走的人,你才大二,面对技术有热情是对的
AI求职实录
点赞 评论 收藏
分享
评论
20
45
分享

创作者周榜

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