【笔试记录】2020.8.23 字节笔试 - 服务端开发(统计不能被3整除的子序列排列情况、统计不能被k整除的子集个数)

前言

(摘自牛客网评论)

  • 每个题目的相关知识点:
    1.有限状态机 //主要是状态转换规则要清楚
    2.无 //完全就是一个列举的问题,一定要把数字进行归类,然后将问题进行拆分
    3.贪心算法 //别忘了题目内的提示。
    4.环图的判断// 转换应该大家都很好做的,第二步BFS或者DFS就可以,我没做主要是因为时间不是很够,而且休息不够脑子有点撑不住了。

1、统计不能被3整除的子序列排列情况

题目

在这里插入图片描述
在这里插入图片描述

思路

(摘自牛客网评论)

  • 主要分三个情况你如果选了余数为i你必然不能选余数为k-i;余数为0的不能超过2个;余数为K/2不能超过两个(最后一条仅限K 为偶数)。你会发现每个小问题在帮助你选择数字的时候相互不影响。
  • 我也用同余定理,分好类之后每组最多选一个,这样用dp来写,dpi=dpi-1 +dpi-1 *numsi-1 +bums
  • dp[i][j]表示以a[i]为结尾且(数组和)%3=j的数组个数。由于a[i]的可选值属于[l,r],因此先算出[l,r]内%3=0,%3=1,%3=2的数的数量,分别记为x0,x1,x2。那么转移方程为dp[i][0] = (dp[i-1][0]*x0%mod + dp[i-1][1]*x2%mod + dp[i-1][2]*x1%mod)%mod,dp[i][1]和dp[i][2]的类似,可以自己推一下。初始化时(数组下标从0开始),令dp[0][0] =x0,dp[0][1] = x1,dp[0][2] = x2,然后直接for循环推就行了。其中计算x0,x1,x2的复杂度为O(1),for循环复杂度为O(n),这样就能过了。

2、统计不能被k整除的子集个数

题目

在这里插入图片描述

参考

思路

(摘自牛客网评论)

  • 按k的余数分组,乘乘加加。比如k=5,那么余1的这批和余4的这批互斥;余1的有2个数,余4的有1个数,那么要么选择余1的(3种,可以选1个或者2个),要么选择余4的(1种),要么都不选(1种),一共5种。再看余2、余3的两批,比方说也是5种,那么乘起来就是25种。如果还有9个余0的,可以选上任一个或者不选,一共10种。乘起来,250种。

启动机器

题目

在这里插入图片描述
在这里插入图片描述

线段和树

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值