1.4 百度2024校招笔试真题

1.4.1 后缀变换

【题目描述】

牛牛定义一种字符串操作为: 对于任意字符串S,可以将其划分为两个非空子串x和y且满足S=xy,通过交换x和y子串的位置得到新字符串W且满足W=yx.例如对于字符串S="helloworld",将其划分为两个部分x="hello"和y="world",经过操作后得到新字符串W="worldhello"。

在给定初始字符串S和结束字符串T以及进行操作次数k,问有多少种不同的操作方案使得将S转化成T?因为答案很大,所以需要模上1000000007后输出。

两种操作方案被视为不同当且仅当存在第i次操作时刻(1≤i≤k),前者得到两部分子串为x1和y1,后者得到两部分子串为x2和y2时, x1≠x2成立。

输入描述:

第一行输入一个仅由小写字母构成的字符串S

第二行输入一个仅由小写字母构成的字符串T

第三行输入操作次数k

2≤|S|=|T|≤1000

1≤k≤100000

输出描述:

输出一个整数表示答案

输入样例:

aaca

caaa

2

输出样例:

2

说明:

"aaca" - "aaac" - "caaa"

"aaca" - "acaa" - "caaa"

【解题思路】

S串首尾相连转换成环的形式,那么对于每次操作的本质就是将下-轮起点转移到除当前的其他位置。考虑设dp[i[j]表示在第i次操作时处于环上第j个节点的方案,转移就是将dp[i-1][j]的值转移到除j以外的其他位置,直接修改复杂度是O(kn2),考虑到只有一个位置不被修改,将转移转化成全局修改以及单点修改两个部分,然后在O(nk)的复杂度内解决问题,进一步优化转移可以发现能将dp求解复杂度降为O(k)。对于最后答案的计算,将T串在S串上确定起点位置,然后将dp所得到对应起点的值求和即可。

【参考代码】

#include <bits/stdc++.h>

#define mp make_pair

#define pb push_back

#define pii pair<int, int>

#define link(x) for (edge *j = h[x]; j; j = j->next)

#define inc(i, l, r) for (int i = l; i <= r; i++)

#define dec(i, r, l) for (int i = r; i >= l; i--)

const int MAXN = 3e5 + 10;

const double eps = 1e-8;

const int mod = 1e9 + 7;

#define ll long long

using namespace std;

ll read() {

ll x = 0, f = 1;

char ch = getchar();

while (!isdigit(ch)) {

if (ch == '-')

f = -1;

ch = getchar();

}

while (isdigit(ch))

x = x * 10 + ch - '0', ch = getchar();

return x * f;

}

int n, k;

char s1[MAXN];

char s2[MAXN];

int dp2[2][MAXN];

int dp1[2];

int main() {

scanf("%s", s1 + 1);

n = strlen(s1 + 1);

scanf("%s", s2 + 1);

k = read();

int now = 0;

dp1[now] = 1;

inc(i, 2, n) dp2[now][i] = 1;

inc(i, 1, k) {

inc(j, 1, n) {

int x = (dp1[now] - dp2[now][j] + mod) % mod;

dp1[now ^ 1] += x;

dp1[now ^ 1] %= mod;

dp2[now ^ 1][j] += x;

dp2[now ^ 1][j] %= mod;

}

dp1[now] = 0;

inc(j, 1, n) dp2[now][j] = 0;

now ^= 1;

}

inc(i, n + 1, 2 * n) s1[i] = s1[i - n];

ll ans = 0;

inc(i, 1, n) {

bool flag = 0;

inc(j, 1, n) if (s1[i + j - 1] != s2[j]) {

flag = 1;

break;

}

if (!flag)

ans += (dp1[now] - dp2[now][i] + mod) % mod, ans %= mod;

}

printf("%lld\n", ans);

return 0;

}

1.4.2 选角色

【题目描述】

牛牛任职于一家演艺公司

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024校招宝典——软件版本 文章被收录于专栏

牛客独家出品,理工科求职必备攻略,适合岗位: 软件开发、数据库分析、软件测试、前端后端开发

全部评论

相关推荐

1️⃣一面问题:1.&nbsp;自我介绍2.&nbsp;讲一段你印象深刻或者参与度很高的项目、中间怎么做的、达成了什么结果(+自己说复盘)3.&nbsp;说说你这个项目遇到的困难或者认为之后可以提升的点4.&nbsp;你说的这些是你项目当时的卡点吗?为什么?5.&nbsp;说说你这段经历里自己相比其他人更大的优势6.&nbsp;啥时候毕业、现居地在哪、何时可来工作7.&nbsp;你觉得自己个人能力方面有哪里是可以继续进步提升的?反问:这个岗位正式工作的主要工作内容?2️⃣二面问题:1.&nbsp;每段实习最多都是做了三个月,没有更长时间的了,方便说下为什么吗?2.&nbsp;券商行研的那段实习经历具体讲一下,做了什么,获得了什么样的方法论,结果如何?3.&nbsp;你参与的咨询实习的看你有写陌电和专家访谈,具体怎么做的?4.&nbsp;如果你和团队领导有意见不合,你会怎样去交流?5.&nbsp;说一个你之前经历中团队内部有异议的情况,后面又是如何解决的?6.&nbsp;说一段你自己印象比较深刻参与度比较高的经历?7.&nbsp;用三个词形容一下你的性格特点?8.&nbsp;你觉得自己的优势和缺陷都有哪些?9.&nbsp;啥时候毕业、现在在哪反问:对我这次面试的评价面试官再反问:因为校招有时也是双向的选择,如果我们招了一个同学但他最后不来对我们来说也是一个损失,所以若以百分制来说你对这个岗位的意向有多少分?3️⃣HR面问题比较常规,主要是问简历经历+毕业时间等基础问题 #美团#&nbsp;&nbsp;&nbsp;#美团2024校招#&nbsp;&nbsp;#美团2024秋招#&nbsp;&nbsp;#美团2024春招#&nbsp;&nbsp;#美团工作体验#
点赞 评论 收藏
转发
hiii~这里是小米的面试陪跑分享时刻:📚【教育背景】考文垂大学本📚【在校经历】本科一直在做代购,同时运营了一个留学工作室得物,作为潮流文化的聚集地,一直是这位女孩子向往的工作平台。面试之前,仔细研究了得物的品牌文化、发展历程以及采购岗位的相关要求,还复习了采购管理的相关知识,包括供应商选择、成本控制、采购流程等,也算是做足了准备!以下是面试过程分享:📮一面-大头兵面1、请简述您对采购岗位的理解,以及您认为采购在供应链中的作用是什么?2、在进行供应商选择时,您通常会考虑哪些关键因素?请举例说明。3、假设公司需要采购一批新产品,您会如何制定采购计划并确保采购过程的高效性?4、谈谈您对成本控制的理解,并分享您在以往工作中如何有效降低成本的经验。5、请描述一次您与供应商沟通解决采购问题的经历,您是如何处理的?6、在团队中,您通常如何与其他部门(如销售、生产等)合作以确保采购流程的顺畅?7、当面对供应商的异议或不满时,您会如何沟通以达成共识?📮二面-大boss面1、请分享一次您处理紧急采购需求的经历,您是如何应对的?2、在采购过程中,您遇到过哪些常见的挑战?您是如何解决这些问题的?3、假设您发现某个供应商存在质量问题,您将如何处理?4、您对当前的采购市场趋势有何了解?请举例说明。5、谈谈您对得物平台及其采购需求的看法,您认为我们的采购策略应如何调整以适应市场变化?6、请分享您认为未来采购行业可能面临的发展机遇和挑战。目前校招求职越来越卷,有需要修改简历、模拟面试、求职陪跑的同学,可以关注小米学姐,后续将分享更多求职案例~
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务