【题解】牛客小白月赛21

牛客小白月赛21解题报告

正式详细题解将在稍后更新!(施工中……)

首先非常抱歉,由于牛客的UI问题导致H题的标点符号显示错误,影响大家体验心情。

题目分类(解题报告按此顺序编写):

  • 签到题:H
  • 前期题:A、C、F、G、I
  • 中期题:E、J
  • 后期题:B、D

H —— "Happy New Year!"

考点:手速和冷静。

输出题目即可。

赛时紧急添加了Special Judge以扭转出锅局面,再次对因该问题影响心情的选手道歉。

PS:使用PHP写据说会有奇效?

点我看标程!

A —— Audio

考点:计算几何基础。

由平方反比定律,发现响度相同时只与距离有关,所以我们只需要求一点,使得该点到三角形三个顶点距离相同,即求三角形的外心。

推导过程即联立任意两边的垂直平分线,求垂直平分线的交点即可。

点我看标程!

C —— Channels

考点:前缀和思想,容斥的思想。

计算的答案减去的答案即可,不过需要注意其端点可能在广告的时刻哦!

具体计算方法:即只需要考虑如何计算的答案。

点我看标程!

F —— Fool Problem

考点:找规律与公式推导。

不难寻得,可以利用斐波那契的递推公式证明该式,此处留给读者思考。

点我看标程!

G —— Game

考点:题意转换。

不难发现某一个数字的质因子个数是一定的,计算其质因子个数来探究可分解的步数进行博弈即可。

其实最后只需要考虑质因子个数的奇偶性。

或者通过sg函数来进行计算:

点我看标程!

I —— I love you

考点:动态规划。

请参看小白月赛3的B题,只不过这里的字符串变长了一些QwQ,道理是一样的(记表示匹配到iloveyou位的方案数,遇到一个字符从其前序字符转移过来即可),简单DP。

点我看标程!

E —— Exams

考点:模拟。

按照题目意思计算学分绩即可。

注意题目中提到“计算且仅计算必修和限选课程”,故任选学分不算在学分绩的总学分里面。

点我看标程!

J —— Jelly

考点:Bfs搜索。

三维迷宫?求从(1,1,1)到(n,n,n)的最短路。

搜索的时候一改二维搜索的四连通,改为三维搜索的六连通,上下左右前后6个方向进行Bfs。

点我看标程!

B —— Bits

考点:模拟,二进制的神奇应用(计算图形学???)

请参看这里,也可以通过Dfs来写,不过注意一下奇偶的位置。

点我看标程!

D —— DDoS

考点:题意转化,拓扑图路径计数

不易观察、挺难发现、较难得到攻击者可以通过调整发送数据包的时间来使得所有数据包同时到达服务器,故原题意转化为求1到n的路径条数,拓扑图上DP即可。

注意定向的含义是规定路线及经过的中继节点,所以重边的时候格外小心(需要算两倍)。

边权无用(其实这里给了个奇怪的数据范围是在暗示呢QwQ)。

点我看标程!

全部评论
求问D为什么建返图就会WA,建正图才能AC。 正图代码 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<set> #include<map> #include<queue> #include<stack> #include<vector> #include<cstring> #include<cstdlib> #include<iomanip> #include<ctime> #include<string> #include<bitset> #define D(x) cout<<#x<<" = "<<x<<"  " #define E cout<<endl using namespace std; typedef long long ll; typedef pair<int,int>pii; const int maxn=100000+5; const int maxm=200000+5; const int INF=0x3f3f3f3f; const ll mod=20010905; int n,m; int head[maxn],tot=1; int in[maxn]; ll d[maxn]; queue<int>q; struct node{ int from,to,c; }edge[maxm]; void add(int from,int to){ edge[++tot].from=head[from],head[from]=tot,edge[tot].to=to; } void dp(){ d[1]=1; q.push(1); while(q.size()){ int x=q.front();q.pop(); for(int i=head[x];i;i=edge[i].from){ int y=edge[i].to; d[y]=(d[y]+d[x])%mod; if(--in[y]==0){ q.push(y); } } } printf("%lld",d[n]%mod); } int main() { // ios::sync_with_stdio(false); freopen("DDoS.in","r",stdin); scanf("%d%d",&n,&m); int from,to,c; for(int i=1;i<=m;i++){ scanf("%d%d%d",&from,&to,&c); add(from,to);  in[to]++; } dp(); return 0; } 反图代码 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<set> #include<map> #include<queue> #include<stack> #include<vector> #include<cstring> #include<cstdlib> #include<iomanip> #include<ctime> #include<string> #include<bitset> #define D(x) cout<<#x<<" = "<<x<<"  " #define E cout<<endl using namespace std; typedef long long ll; typedef pair<int,int>pii; const int maxn=100000+5; const int maxm=200000+5; const int INF=0x3f3f3f3f; const ll mod=20010905; int n,m; int head[maxn],tot=1; int in[maxn]; ll d[maxn]; queue<int>q; struct node{ int from,to,c; }edge[maxm]; void add(int from,int to){ edge[++tot].from=head[from],head[from]=tot,edge[tot].to=to; } void dp(){ d[n]=1; q.push(n); while(q.size()){ int x=q.front();q.pop(); for(int i=head[x];i;i=edge[i].from){ int y=edge[i].to; d[y]=(d[y]+d[x])%mod; if(--in[y]==0){ q.push(y); } } } printf("%lld",d[1]%mod); } int main() { // ios::sync_with_stdio(false); // freopen("DDoS.in","r",stdin); scanf("%d%d",&n,&m); int from,to,c; for(int i=1;i<=m;i++){ scanf("%d%d%d",&from,&to,&c); add(to,from); //反图  in[from]++; } dp(); return 0; }
1 回复 分享
发布于 2020-01-18 22:26
D题 以下数据 6 6 1 2 1 4 2 1 2 6 1 1 3 1 5 3 1 3 6 1 ac代码 https://ac.nowcoder.com/acm/contest/view-submission?submissionId=42693820 运行出来是0 不应该是2吗
点赞 回复 分享
发布于 2020-01-19 12:13
请问D题有重边只算一次贡献是吗
点赞 回复 分享
发布于 2020-01-18 22:41
我菜炸了😓
点赞 回复 分享
发布于 2020-01-18 22:27
E题为啥要加上0.5啊
点赞 回复 分享
发布于 2020-01-18 22:20
所以,D题 3 4 1 2 1 1 2 1 2 3 1 2 3 1 答案是多少
点赞 回复 分享
发布于 2020-01-18 22:13

相关推荐

03-15 14:55
已编辑
门头沟学院 golang
bg:双非学院本&nbsp;ACM银&nbsp;go选手timeline:3.1号开始暑期投递3.7号第二家公司离职顽岩科技&nbsp;ai服务中台方向&nbsp;笔试➕两轮面试,二面挂(钱真的好多😭)厦门纳克希科技&nbsp;搞AI的,一面OC猎豹移动&nbsp;搞AIGC方向&nbsp;一面OC北京七牛云&nbsp;搞AI接口方向&nbsp;一面OC上海古德猫宁&nbsp;搞AIGC方向&nbsp;二面OC上海简文&nbsp;面试撞了直接拒深圳图灵&nbsp;搞AIGC方向一面后无消息懒得问了,面试官当场反馈不错其他小厂没记,通过率80%,小厂杀手😂北京字节&nbsp;具体业务不方便透露也是AIGC后端方向2.28约面&nbsp;(不知道怎么捞的我,我也没在别的地方投过字节简历哇)3.6一面&nbsp;一小时&nbsp;半小时拷打简历(主要是AIGC部分)剩余半小时两个看代码猜结果(经典go问题)➕合并二叉树(秒a,但是造case造了10分钟哈哈)一天后约二面3.12&nbsp;二面,让我挑简历上两个亮点说,主要说的docker容器生命周期管理和raft协议使用二分法优化新任leader上任后与follower同步时间。跟面试官有共鸣,面试官还问我docker底层cpu隔离原理和是否知道虚拟显存。之后一道easy算法,(o1空间解决&nbsp;给定字符串含有{和}是否合法)秒a,之后进阶版如何用10台机加快构建,想五分钟后a出来。面试官以为45分钟面试时间,留了18分钟让我跟他随便聊,后面考了linux&nbsp;top和free的部分数据说什么意思(专业对口了只能说,但是当时没答很好)。因为当时手里有7牛云offer,跟面试官说能否快点面试,马上另外一家时间到了。10分钟后约hr面3.13,上午hr面,下午走完流程offer到手3.14腾讯技术运营约面,想直接拒😂感受:&nbsp;因为有AIGC经验所以特别受AI初创公司青睐,AIGC后端感觉竞争很小(指今年),全是简历拷打,基本没有人问我八股(八股吟唱被打断.jpeg),学的东西比较广的同时也能纵向深挖学习,也运气比较好了哈哈可能出于性格原因,没有走主流Java路线,也没有去主动跟着课写项目,项目都是自己研究和写的哈哈
烤点老白薯:你根本不是典型学院本的那种人,贵了你这能力
查看7道真题和解析
点赞 评论 收藏
分享
评论
7
3
分享

创作者周榜

更多
牛客网
牛客企业服务