链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
A题目描述
你说得对,但是《山东大学》是由国家自主创办的一所综合性大学。学校位于中国山东省,拥有悠久的历史和卓越的学术声誉。在这里,学生们可以获得广泛的学科教育和丰富的学术资源。你将扮演一位名为「学子」的角色,在这个知识的海洋中追求学术成就,与各具特色、才华横溢的同学们相遇,共同探索学术领域的边界,为社会的发展做出贡献。
你的学习成绩很一般。我现在每天在山东大学学习,都能获取丰富的知识和学术资源。我每学期上学都能获得30学分,每年差不多60学分的收入,也就是现实生活中每个月7学分的学习水平,换算过来最少也两门核心课。虽然我只有20岁,但我的学术水平超越了绝大多数同龄人————包括你在内。这是山东大学赋予我的骄傲的资本。毫不夸张地说,山东大学是中国高等教育领域中规模最大、最具影响力的一所学府,也是国内外学术研究的重要基地。即便在度过了漫长的学业之路后,仍然有许多未知的领域等待我们去探索,错过的学术机会和未曾涉足的学科领域。尽管学习过程中的困难与我们之前所面临的挑战有所不同,但山东大学提供了精心设计的学科课程和深入研究的机会,将我们的学术能力提升到一个新的高度。就像几十年前的《北京大学》一样,它也是一所能够推动教育事业向前发展的优秀学府。
这位同学,我再强调一遍!山东大学很厉害!本科上山东大学,让你考研、直博、出国机会倍增,山东大学写在简历上,远比其他乱七八糟的信息更硬核!多为读山东大学花心思,别舍不得精力物力,往这方面投入比吃喝拉撒回报率高无数倍!如果你还不行动起来,那我只能通过校园网找到你给你加学分了
Prof. Wang 是一位计算机科学家,他对大语言模型 (Large Language Model, LLM) 理解颇深。以上是著名的大语言模型 chatgpt-3.5 对 Prof. Wang 母校的评价(出题人进行了不改变原意的微调)。如果你并不了解大语言模型,那么恭喜幸运的你,这题不需要对其进行深入的理解。
Prof. Wang 有一个不成器的学生小 Z,小 Z 把 Prof. Wang 的模型改崩了。Prof. Wang 使用他的模型生成了一段 仅由小写英文字母 组成的段落,意外发现里面出现了若干个不想看到的字符——大写的 Z,现在 Prof. Wang 想让你把这些 Z 全部删除,请你输出修改后的字符串是什么样的。
#include<stdio.h>
#include<string.h>
int main()
{
char s[101];
scanf("%s",s);
int m=strlen(s);
for(int i=0;i<m;i++)
{
if(s[i]!='\0'){
if(s[i]=='Z') continue;
else printf("%c",s[i]);}
}
return 0;
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
B题目描述
2023年8月27日,福州地铁4号线正式开通!
吉吉是福州市的一位普通市民。由于吉吉的家附近刚好有一处4号线的地铁站,吉吉可以搭乘4号线更方便地去其他地方游玩(比如去东泰禾打maimai)。
4号线有 nnn 个站点,以某个方向从起点站开始从 111 到 nnn 依次标号。吉吉从他的好朋友(是一位地铁爱好者)Hakuro得知,地铁是所有交通公具中最准时的。地铁会按照规定的单位时间数依次到达每个站点。当然,一条线路上任意两个站点的往返乘车耗时是相等的。如下图所示的时间中,如果吉吉从东街口站上车前往会展中心站,那么他将耗费 35−10=2535 - 10 = 2535−10=25 个单位时间;如果吉吉从城门站上车前往竹屿站,那么他将耗费 27−4=2327 - 4 = 2327−4=23 个单位时间。

(可以看到从左到右,城门站、会展中心站、竹屿站和东街口站的显示的时间数依次为4、10、27和35)
趁着4号线的免费试乘活动,吉吉打算只搭乘4号线去其他地铁站的附近游玩。假设吉吉家附近的地铁站的标号为 k (1≤k≤n)k \ (1 \le k \le n)k (1≤k≤n) ,对于第 iii 个地铁站,有一个单位时间值 tit_iti 和一个欢乐值 viv_ivi ,表示吉吉选择在第 iii 个地铁站附近游玩需要耗费 tit_iti 的单位时间,游玩结束后会获得 viv_ivi 点欢乐值。当然,如果之前已经在某个地铁站附近游玩后再次选择该地铁站游玩,那么吉吉游玩结束后不会获得该站的欢乐值(谁会在同一个地铁站玩两次啊)。特殊的,由于吉吉对家周围的情况非常熟悉,所以有 tk=0t_k = 0tk=0 和 vk=0v_k = 0vk=0 。
由于吉吉身上有因幡天为的四叶草,所以只要吉吉到地铁站就可以马上乘车。当然,由于免费试乘活动的时间有限,吉吉必须在 TTT 个单位时间内从家里出发出门活动,并且最后要回到家里。吉吉想知道,在 TTT 个单位时间内如何安排自己的游玩行程,使得得到的欢乐值总和 VVV 最多?但是吉吉现在在东泰禾和Hakuro拼机,所以他把这个问题交给了聪明的你。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M = 2e5+5;
ll f1[M],f2[M];
void solve(){
int n,T,k;
cin >> n >> T >> k;
vector<int> t(n+1),v(n+1),w(n+1);
for(int i = 1; i <= n; i ++ )cin >> t[i];
for(int i = 1; i <= n; i ++ )cin >> v[i];
for(int i = 1; i <= n; i ++ )cin >> w[i];
ll ans = 0;
for(int i = 1; i <= k; i ++ ){
int need = 2*(t[k]-t[i]);
for(int j = T; j >= v[i]+need; j -- ){
f1[j] = max(f1[j],f1[j-v[i]]+w[i]);
}
}
for(int i = n; i >= k; i -- ){
int need = 2*(t[i]-t[k]);
for(int j = T; j >= v[i]+need; j -- ){
f2[j] = max(f2[j],f2[j-v[i]]+w[i]);
}
}
for(int t1 = 0; t1 <= T; t1 ++ ){
int t2 = T - t1;
ans = max(ans,f1[t1]+f2[t2]);
}
cout << ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
C题目描述
小 Z 沉迷于一款游戏。
这款游戏是这样的:小 Z 扮演一个勇者去挑战一个怪兽。小 Z 可以和这个怪兽战斗 nnn 回合,小 Z 的初始攻击力为 111,小 Z 有两个技能,每回合他必须选择一个技能使用,两个技能为:
- 强化: 让自己的攻击力翻倍。
- 攻击: 对怪兽造成伤害值为 自己当前攻击力 的伤害。
这款游戏显然非常无聊,因为怪兽不会攻击小 Z, 但小 Z 沉迷这种多次强化之后一刀 999 的快感。
当小 Z 对怪兽造成的伤害总和不少于 mmm 时,小 Z 就能战胜怪兽 。小 Z 想知道他能否通过合理使用技能在 nnn 回合内战胜怪兽。
#include<stdio.h>
#include<math.h>
int main()
{
int n,m;
scanf("%d%d",&n,&m);
long long k=pow(2,n-1);
if(k>=m) printf("Yes");
else printf("No");
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
D题目描述
Prof. Wang 闲暇时喜欢和他的学生小 Z 下五子棋。
五子棋的规则大概是这样:在一张 15×1515\times 1515×15 的棋盘上,先手执黑,后手执白,二人轮流落子。每次可以选择一个还未被占据的格子,落下自己的棋子。若某一时刻,落子后存在五个自己的棋子连成一条连续的线(包含横线、竖线和与主副对角线平行的的斜线),则判定为获胜。(本题中不强制第一手必须天元、不考虑各类禁手)
Prof. Wang 在游戏中总是先手,但作为一名 Professor,他深知传统功夫以点到为止,即便是对待他的弟子小 Z 也是如此。当一个残局已经进行到自己可以一步必杀时,他会绅士地提和。现在 Prof. Wang 给了你一张残局,请你输出他是否可以使用下一步拿下小 Z。
#include<stdio.h>
typedef struct{
char s[15];
}yp;
yp a[15];
int main()
{
int T;
scanf("%d",&T);
for(int i=0;i<T;i++)
{
for(int j=0;j<15;j++)
{
scanf("%s",a[j].s);
}
for(int j=0;j<15;j++)
{
for(int k=0;k<15;k++)
{
if(k+4<15){
if(a[j].s[k]=='0'&&a[j].s[k+1]=='1'&&a[j].s[k+2]=='1'&&a[j].s[k+3]=='1'&&a[j].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j].s[k+1]=='0'&&a[j].s[k+2]=='1'&&a[j].s[k+3]=='1'&&a[j].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j].s[k+1]=='1'&&a[j].s[k+2]=='0'&&a[j].s[k+3]=='1'&&a[j].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j].s[k+1]=='1'&&a[j].s[k+2]=='1'&&a[j].s[k+3]=='0'&&a[j].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j].s[k+1]=='1'&&a[j].s[k+2]=='1'&&a[j].s[k+3]=='1'&&a[j].s[k+4]=='0'){
printf("Yes\n");
goto out;
}
}
if(j+4<15){
if(a[j].s[k]=='0'&&a[j+1].s[k]=='1'&&a[j+2].s[k]=='1'&&a[j+3].s[k]=='1'&&a[j+4].s[k]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k]=='0'&&a[j+2].s[k]=='1'&&a[j+3].s[k]=='1'&&a[j+4].s[k]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k]=='1'&&a[j+2].s[k]=='0'&&a[j+3].s[k]=='1'&&a[j+4].s[k]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k]=='1'&&a[j+2].s[k]=='1'&&a[j+3].s[k]=='0'&&a[j+4].s[k]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k]=='1'&&a[j+2].s[k]=='1'&&a[j+3].s[k]=='1'&&a[j+4].s[k]=='0'){
printf("Yes\n");
goto out;
}
}
if(j+4<15&&k+4<15){
if(a[j].s[k]=='0'&&a[j+1].s[k+1]=='1'&&a[j+2].s[k+2]=='1'&&a[j+3].s[k+3]=='1'&&a[j+4].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k+1]=='0'&&a[j+2].s[k+2]=='1'&&a[j+3].s[k+3]=='1'&&a[j+4].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k+1]=='1'&&a[j+2].s[k+2]=='0'&&a[j+3].s[k+3]=='1'&&a[j+4].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k+1]=='1'&&a[j+2].s[k+2]=='1'&&a[j+3].s[k+3]=='0'&&a[j+4].s[k+4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k+1]=='1'&&a[j+2].s[k+2]=='1'&&a[j+3].s[k+3]=='1'&&a[j+4].s[k+4]=='0'){
printf("Yes\n");
goto out;
}
}
if(j+4<15&&k-4>=0){
if(a[j].s[k]=='0'&&a[j+1].s[k-1]=='1'&&a[j+2].s[k-2]=='1'&&a[j+3].s[k-3]=='1'&&a[j+4].s[k-4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k-1]=='0'&&a[j+2].s[k-2]=='1'&&a[j+3].s[k-3]=='1'&&a[j+4].s[k-4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k-1]=='1'&&a[j+2].s[k-2]=='0'&&a[j+3].s[k-3]=='1'&&a[j+4].s[k-4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k-1]=='1'&&a[j+2].s[k-2]=='1'&&a[j+3].s[k-3]=='0'&&a[j+4].s[k-4]=='1'){
printf("Yes\n");
goto out;
}
if(a[j].s[k]=='1'&&a[j+1].s[k-1]=='1'&&a[j+2].s[k-2]=='1'&&a[j+3].s[k-3]=='1'&&a[j+4].s[k-4]=='0'){
printf("Yes\n");
goto out;
}
}
}
}
printf("No\n");
out:;
}
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
E题目描述
有 nnn 个人同时看中了一种商品。每个人最多愿意支付 aia_iai 的钱。如果一个人愿意支付的钱不到设定的价格,那么他不会选择购买这种商品。如果一个人愿意支付的钱不低于设定的价格,他们会按价格买下一件。
你现在是店主,由你来设定价格,使得可以挣到尽可能多的钱。
#include<stdio.h>
#include<stdlib.h>
int cmp_int(const void*p1,const void*p2)
{
return *(int*)p2-*(int*)p1;
}
int main()
{
int n;
scanf("%d",&n);
long long int a[n];
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
qsort(a,n,sizeof(a[0]),cmp_int);
int ans;
long long profit=0;
for(int i=0;i<n;i++)
{
long long tem=(long long)a[i]*(i+1);
if(tem>=profit) {
profit=tem;
ans=a[i];}
}
printf("%lld %d",profit,ans);
return 0;
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
F题目描述
Prof. Wang 闲暇时喜欢和他的学生小 Z 玩一个益智游戏。两人总共有 333 堆石子,轮流操作。每次可以选定一堆石子,从其中取走 1…k1\dots k1…k 个,不能取的人输。众所周知,Prof. Wang 是个非常为老不尊的老登,所以他总会选择自己先手操作,留给小 Z 后手。在这个问题中,假设 Prof. Wang 和小 Z 都是足够聪明的,并且都想让自己获胜(不存在人情世故)。
Prof. Wang 的实验室门口堆了 nnn 堆石子,他总会大方地让小 Z 从中任选 333 堆,然后进行游戏。小 Z 觉得这样对自己并不是很有利,于是他决定只从其中选择 222 堆,然后自己捏造最后一堆(但你需要注意,这堆不可以为 000)。现在他想知道,在合理的选取之下,捏造的这堆石子最少需要是多大。由于其他因素的影响,石子堆可能会发生一些改变。
也就是说,小 Z 现在面临的问题是这样的:初始有 nnn 堆石子,他需要支持以下三种操作 qqq 次:
- 1 x 表示增加一堆大小为 xxx 的石子。
- 2 x 删除一堆大小为 xxx 的石子,保证这样的石子堆存在。
- 3 询问最小的 正整数 xxx ,使得当前石子堆中存在两堆石子,它们和大小为 xxx 的石子堆进行上述游戏,后手可以必胜。如果不存在这样的 xxx,输出 −1-1−1。
保证任何时刻,石子的堆数总不少于 222 。
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
const int maxn = 5e5 + 5;
int n, k, Q, a[maxn];
multiset<int> s; // 维护异或值
multiset<int> t; // 维护序列
int qwq; // 维护异或值为0的数对个数
int rd(){
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9'){
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
void del(int x){
if(!x) qwq--;
else s.erase(s.find(x));
}
void add(int x){
if(!x) qwq++;
else s.insert(x);
}
void solve(){
n = rd(), k = rd(), Q = rd(); // 读入 n, k, Q
for(int i = 1; i <= n; i++){
a[i] = rd() % (k + 1);
t.insert(a[i]);
}
sort(a + 1, a + n + 1);
for(int i = 1; i < n; i++){
add(a[i] ^ a[i + 1]);
}
while(Q--){
int op, x;
op = rd(); // 读入操作类型
if(op == 1){
x = rd() % (k + 1); // 读入 x
auto pos = t.lower_bound(x);
int p1, p2;
if(pos == t.end()){
pos--;
p1 = *pos;
add(x ^ p1);
}else if(pos == t.begin()){
p2 = *pos;
add(x ^ p2);
}else{
p2 = *pos;
pos--;
p1 = *pos;
del(p1 ^ p2);
add(x ^ p1);
add(x ^ p2);
}
t.insert(x);
}else if(op == 2){
x = rd() % (k + 1);
t.erase(t.find(x));
auto pos = t.lower_bound(x);
int p1, p2;
if(pos == t.end()){
pos--;
p1 = *pos;
del(x ^ p1);
}else if(pos == t.begin()){
p2 = *pos;
del(x ^ p2);
}else{
p2 = *pos;
pos--;
p1 = *pos;
add(p1 ^ p2);
del(x ^ p1);
del(x ^ p2);
}
}else{
int res = 2147483647;
if(!s.empty()) res = min(res, *s.begin());
if(qwq) res = min(res, k + 1);
cout << res << endl;
}
}
}
int main(){
solve();
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
G题目描述
明明有 nnn 个长度为 mmm 的字符串,现在老师展示了一个长度为 mmm 的字符串,你需要找到明明有多少个字符串和老师的字符串是相似的。
相似的定义为:两个字符串头尾对齐以后,对应位置上有不超过 kkk 个字符是不同的,那么两个字符串是相似的。
#include<stdio.h>
#include<string.h>
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
typedef struct{
char s[6005];
}mm;
mm a[n];
for(int i=0;i<n;i++)
{
scanf("%s",a[i].s);
}
char T[m];
scanf("%s",T);
int ans=0;
for(int i=0;i<n;i++)
{
int cnt=0;
for(int j=0;j<m;j++)
{
if(a[i].s[j]!=T[j])
cnt++;
}
if(cnt<=k) ans++;
}
printf("%d",ans);
return 0;
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
H题目描述
作为一名擅长与选手同场竞技的出题人,在大家进行比赛的同时,小w会实时查看大家的提交情况。
小 w 会随机抽取一段提交区间,然后筛选出所有选手的通过的提交,如果这段区间中有一道题目通过数量至少为 kkk 次,那么小 w 会认为这是一道简单题。现在给出你所有答案正确的提交记录,请你计算一下,小 w 看到的简单题的期望种类数是多少。
形式化的,给你一个长度为 nnn 的序列,表示按照时间顺序从早到晚通过的题目编号。小 w 会从中随机挑选一个区间,如果某道题在这个区间内出现至少 kkk 次,那么小 w 会认为其是一个简单题,现在你需要计算小 w 期望看到的简单题种类数,对 998244353998244353998244353 取模后的结果。(即设答案化为最简分式后的形式为 ab\frac{a}{b}ba ,其中 aaa 和 bbb 互质。输出整数 xxx 使得 bx=a(mod998244353)bx=a\pmod {998244353}bx=a(mod998244353) 且 0≤x<9982443530\le x< 9982443530≤x<998244353。可以证明这样的整数 xxx 是唯一的。)
小 w 随机挑选区间的方式如下:
首先在 [1,n][1,n][1,n] 中等概率的随机一个右端点R。
然后在 [1,R][1,R][1,R] 中等概率的随机一个左端点L。
最终得到区间 [L,R][L,R][L,R]
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
constexpr int mod = 998244353;
// 快速幂算法
LL qp(LL a, LL b) {
LL res = 1;
for (; b; b >>= 1, a = a * a % mod) {
if (b & 1) {
res = res * a % mod;
}
}
return res;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
// 用于存储每个题目的编号
vector<int> a(n + 1);
// 用于存储每个题目的出现位置
vector<vector<int>> G(n + 1);
// 输入每个题目的编号
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
LL ans = 0, sum = 0;
for (int i = 1; i <= n; i++) {
// 将题目i的出现位置加入G数组
G[a[i]].push_back(i);
// 计算sum的值:取最新的k个出现位置的和
if (G[a[i]].size() >= k) {
sum = (sum + G[a[i]][G[a[i]].size() - k]) % mod;
}
// 更新sum的值:减去第(k+1)个最早的出现位置
if (G[a[i]].size() > k) {
sum = (sum - G[a[i]][G[a[i]].size() - k - 1] + mod) % mod;
}
// 计算ans的值:根据公式 ans += (n^(-1) * i^(-1) * sum)
ans = (ans + qp(n, mod - 2) * qp(i, mod - 2) % mod * sum) % mod;
}
// 输出结果
cout << ans << '\n';
return 0;
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
I题目描述
在妖怪之山上,有两个相互依存,又相互对立的种族:河童和山童。
河童有着先进的机械制造技术,山童有着先进的经济研究,构筑着复杂的金钱系统,但是河童的机械如果没有山童就无法完成,山童的经济若没有河童的制造能力也是暴殄天物。
虽然两者类似,但是生存环境和生活方式大不相同。因此河童称山童为“区区住在林子里的猴子”,而山童称河童为“区区住在河里的两栖类”。
由于他们的专业技术离不开数字,为了证明能力,河童和山童之间开始了一场数字对决。

(pixivID:98502091,左边是山城高岭,右边是河城荷取)
数字对决的规则如下:
- 河童和山童两方各自确定一个数字区间,分别为 [l1,r1][l_1,r_1][l1,r1] 和 [l2,r2][l_2,r_2][l2,r2] 。其中, l1,r1,l2,r2l_1,r_1,l_2,r_2l1,r1,l2,r2 均为正整数且 l1≤r1l_1 \le r_1l1≤r1、 l2≤r2l_2 \le r_2l2≤r2 。双方都在各自的数字区间内分别同时独立随机选取正整数 x1x_1x1 (l1≤x1≤r1)(l_1 \le x_1 \le r_1)(l1≤x1≤r1) 和 x2x_2x2 (l2≤x2≤r2)(l_2 \le x_2 \le r_2)(l2≤x2≤r2) 。若 x1>x2x_1 > x_2x1>x2 ,则河童一方胜;若 x1<x2x_1 < x_2x1<x2 ,则山童一方胜;若 x1=x2x_1 = x_2x1=x2 ,则判定为平局。(注:独立选取代表着选取数字的概率不受对方影响。随机选取为等概率选取,即在一段区间内所有正整数被选取的概率是一样的。)
现在,河城荷取(河童代表)和山城高岭(山童代表)之间要进行 nnn 场数字对决。作为裁判员,对于每场数字对决,河城白露需要判断谁获胜的概率高。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
long long int l1,r1,l2,r2;
scanf("%lld %lld %lld %lld",&l1,&r1,&l2,&r2);
if(r1-r2>l2-l1) printf("Nitori Win\n");
else if(r1-r2==l2-l1) printf("Draw\n");
else printf("Takane Win\n");
}
return 0;
}
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
J题目描述
小 Z 有一个只包含小写英文字母的字符串 SSS 。
小 Z 还会一种奇妙的字符魔法,每次使用魔法可以将字符串 SSS 中的一个字符改变成任意一个小写英文字母。
发动魔法非常耗费小 Z 的精力,因此他想知道,如果想让 SSS 中下标为 lll 到 rrr 的字符都变成相同的小写字母,最少需要使用几次魔法。
小 Z 对这样的问题非常感兴趣,因此他会询问 mmm 次这样的问题。请注意,小 Z 只是进行询问,并不会真的使用魔法对字符串进行修改。
#include<stdio.h>
int main()
{
int n,m;
scanf("%d %d",&n,&m);
char s[n];
scanf("%s",s);
int ans=0;
int dp[n+1][256];
for(int i=0;i<=n;i++)
{
for(int j=0;j<256;j++)
{
dp[i][j]=0;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<256;j++)
{
dp[i+1][j]=dp[i][j];
}
dp[i+1][s[i]]++;
}
for(int i=0;i<m;i++){
int ans=0;
int l,r;
scanf("%d%d",&l,&r);
for(int j=0;j<256;j++){
int tem=dp[r][j]-dp[l-1][j];
ans=(tem>ans)?tem:ans;
}
ans=r-l+1-ans;
printf("%d\n",ans);
}
}
这里hash表可以改下变成dp[i + 1][s[i] - 'a'],差不多。
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
K题目描述
小 Z 有一个序列 {ai}\{a_i\}{ai}。
对于一个子序列 ai1,ai2,…,ai,ka_{i_1},a_{i_2},\dots,a_{i,k}ai1,ai2,…,ai,k(i1<i2<⋯<iki_1< i_ 2<\dots < i_ki1<i2<⋯<ik)。如果这个 子序列中的数按位异或的结果 等于 不在子序列中的数按位异或的结果 ,则该子序列是优美的。
按位异或,即 C++/Java 中的 ^ 运算符,对于任意的非负整数 x,按位异或运算满足 x ^ x = 0, x ^ 0 = x。
现在小 Z 想知道序列中有多少个子序列是优美的。请注意,在小 Z 的定义中,子序列的长度可以为 0。
#include<stdio.h>
typedef long long ll;
int main(void)
{
long long a,ans=0;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a);
ans=a^ans;
}
if(!ans) printf("%lld",(ll)2<<n-1);
else printf("0");
}
本文介绍了“可达鸭杯“山东大学程序设计精英挑战赛的预赛题目,包括A到K共11个题目。题目涉及算法和数据结构的应用,如字符串处理、地铁线路优化、游戏策略、五子棋策略、商品定价、石子游戏、字符串相似度计算、比赛题目难度评估、随机选取区间概率分析以及字符序列变换等。

477

被折叠的 条评论
为什么被折叠?



