校选打完了 还是没进前十┭┮﹏┭┮
大佬的题解真看不懂 所以自己写了一篇
填空第一题和编程前五题满分题解,后面暴力+骗分(啊反正不是正解)
今天是2023年11月22日,小明想知道在 [2023,20231122] 范围内有多少个整数出现过 1122
。
例如: 整数 11122122 出现过 1122
,整数 11322 没有出现过 1122
。
字符串判断,判断1122是否在字符串里面 可以用python 把数字转成字符再判断
ss="1122"
ans=0
for i in range(2023,20231123):
s=str(i) #数字转化成字符串
if(ss in s):#如果1122在这个字符串里 就加一
ans+=1
print(ans)
7-1 JMU最菜的人是谁?分数:5
显然善良的贝贝不会为难来签到的你的~
请回答出“集美大学最菜的人是谁?”这个问题的答案
这道题答案是众所周知的。
你只需要输出“林贝宁是集美大学最菜的人”这句话的全拼,出题人就会因为你的诚实可贵而奖励你5分。
本题无输入。
仅一行,包含一个字符串,为“林贝宁是集美大学最菜的人”这句话的全拼,每个汉字的拼音之间请使用空格隔开。
这题当然没有输入
这里当然也没有输出~
提示1:假如你需要输出“王丹薇是集美大学最强的人”的全拼
wang dan wei shi ji mei da xue zui qiang de ren
提示2:
l
和n
,以及in
和ing
。林
和宁
的全拼。提示3:
直接输出 用python写的少一点点 “林”的拼音没有g
print("lin bei ning shi ji mei da xue zui cai de ren")
7-2 烽火大都督 分数10
贝贝平时最大的乐趣,就是在闲暇的时候,开一把紧张刺激的《王(dan)者(zai)荣(pai)耀(dui)》。
而贝贝最喜欢的英雄莫过于“烽火大都督”——周瑜
而荣耀战力的计算公式如下:荣耀战力 =(胜场战力+排位表现分+巅峰战力)*(1 + 巅峰系数)*(活跃系数)
请你写一个程序,帮贝贝计算他的荣耀战力。
仅一行,包含5个整数a,b,c,d,e,分别表示贝贝的某个英雄的胜场战力、排位表现分、巅峰战力、巅峰系数、活跃系数。
其中巅峰系数和活跃系数,将以百分数的形式给出(不含百分号)。
仅一行,包含一个整数,表示贝贝的某个英雄的荣耀战力。
2977 1700 2000 25 100
8346
对于100%的数据,0≤a≤3000,0≤b≤3000,0≤c≤10000,0≤d,e≤100。
注1:关于输出
注2:关于判题程序
注3:关于“格式错误”
模拟题,主要是最后要保留0位小数 所以用c++里的fixed setprecision(0)来保留就行
#include
using namespace std;
int main()
{
double a,b,c,d,e;
cin>>a>>b>>c>>d>>e;
d=d/100;
e=e/100;
double ans=(a+b+c)*(1+d)*e;
cout<
7-3 背单词 分数:15
小明正在为四级做准备,他计划至少背 n 个新单词。
为了完成这个目标,小明决定在每天结束前背一些新单词,具体来说:
现在小明想知道按照这个方式背单词,最早在第几天结束时累计背了至少 n 个新单词。
输入一行,包含两个整数 n,m ,分别代表小明计划背的新单词总数和小明第一天背的新单词数量。
输出一行,包含一个整数 d ,代表小明在第 d 天结束时累计背了至少 n 个新单词。
100 100
1
第一天背了 100 个新单词,最早在第一天结束时完成背至少 100 个新单词的计划。
100 50
3
第一天背了 50 个新单词,第二天背了 25 个新单词,第三天背了 76 个新单词,累计背了 151 个新单词,最早在第三天结束时完成了背至少 100 个新单词的计划。
对于 60% 分数的评测用例,1≤n≤106,1≤m≤1000 。
对于 100% 分数的评测用例,1≤n≤1012,1≤m≤1000 。
用暴力模拟可以得9分 但是n最大是10^12 会超时
枚举一下会发现 最后都会进入4 2 1 4 2 1的循环 所以遇到这种情况 可以把4 2 1这三天为一组,总的为7,可以快速减少循环次数
#include
using namespace std;
#define ll long long
ll n,m;
ll day;
int main()
{
cin>>n>>m;
while(n>0)
{
n-=m;
day++;
//现正常模拟
if(m%2==0)
{
m/=2;
}
else
{
m=3*m+1;
}
//遇到最终的情况了
if(m==1||m==2||m==4)
{
day+=(n/7)*3;//4+2+1=7 三天为一组
n%=7;
}
}
cout<
7-4 堆 分数:15
在本题中,你需要实现一个数据结构,它需要支持以下操作:
对于每个操作2,你需要输出被删除的值。
第一行包含一个正整数 Q(2≤Q≤106),Q表示操作的次数。
接下来Q行,每行将以下方的格式来描述每次操作:
1 x
:表示题目描述中的操作1。2
:表示题目描述中的操作2。3 x
:表示题目描述中的操作3。对于操作1和操作3的x满足∣x∣≤109。
保证每次操作2时该数据结构内至少有一个元素。
具体可见样例。
输出包含若干行,每行有一个整数。第i行的整数表示第i次操作2所删除的数的大小。
13
1 1
1 1
1 2
1 3
1 4
2
3 10
2
1 1
2
1 12
2
2
1
11
1
12
12
对于40%分数的数据,满足∣x∣≤109,2≤Q≤1000。
对于100%的数据,满足∣x∣≤109,2≤Q≤106。
用priority_queue优先队列可以自动把放入的元素从小到大排序 然后依次取出
难点在于怎么把全部加上x后不超时
定义一个add 用来存加了多少数 每次1操作要加入x的时候 在堆里加(x-add)可以保证大小顺序不变 然后在3操作加x的时候 add+=x 在2操作删除的时候 输出当前最小的值+add 这样就能保证新加入的数不会受之前的影响
#include
using namespace std;
#define ll long long
priority_queue ,greater > q;//优先队列 greater是自动从小到大排序
ll add;
int main()
{
ios::sync_with_stdio(0);//关流加速
cin.tie(0);
cout.tie(0);
int Q;
cin>>Q;
while(Q--)
{
int op;
cin>>op;
if(op==1)
{
ll x;
cin>>x;
q.push(x-add);//用add来控制
}
else if(op==2)
{
cout<>x;
add+=x;
}
}
return 0;
}
7-5 玩《Minecraft》的贝贝 分数:15
贝贝通过./give
指令获得了n个木棍和m个钻石,以及一个工作台,他想要制造尽可能多的工具。
一共有五种钻石工具,下面是每种钻石工具的合成方案:
第一行,一个整数,为数组组数T。
接下来的T行,每行两个以空格分隔的整数n,m。
输出T行,每行一个整数,表示该组数据可制作工具数量的最大值。
3
2 9
5 4
6 7
2
3
4
对于20%的数据,1≤T≤5,0≤n,m≤20。
对于100%的数据,1≤T≤105,0≤n,m≤109。
因为要制造最多的工具数量,所以制造工具所用的材料当然越少越好 所以只有2钻石1木棍和1钻石2木棍的组合可以选择
设2 1的个数有x个
设1 2的个数有y个
求x+y的max
木棍不能超过n个 所以2x+y<=n
钻石不能超过m个 所以x+2y<=m
所以x+y<=(n+m)/3
再判断现在的这个max是否比木根和钻石的最小值谁大
因为如果在达到这个最大值之前 木棍或者钻石用完了 就已经结束了
#include
using namespace std;
#define ll long long
int main()
{
int t;
cin>>t;
while(t--)
{
ll n,m;
cin>>n>>m;
ll temp=(n+m)/3;
ll ans=0;
if(temp>=min(n,m))
{
ans=min(n,m);
}
else{
ans=temp;
}
cout<
7-6 卯酉东海道 分数:20
琪露诺想找三月精一起玩。她计划乘坐广重 36 号列车从雾之湖去到博丽神社。
整个隙间交通网络目前具有 n 个站台,但是由于需要收费,因而每个通道都是单向道路,同时每条通道具有一定的颜色和费用(冰块)。总的隙间通道一共有 m 条,总的通道颜色一共有 l 种。
琪露诺有一张通行卡,在她出发前,她可以任意染色该通行卡而不花费费用。当通行卡的颜色与琪露诺想要经过的通道颜色相同时,琪露诺就可以借助该通路到达下一站,花费这条道路的冰块数 w。若通行卡的颜色与琪露诺想要经过的通道颜色不相同,琪露诺需要支付冰块数 base×w ,同时将通行卡颜色改为该通道的颜色后,才可通过。
现在琪露诺在 1 号雾之湖站,要去 n 号博丽神社站。问在最优决策的情况下,琪露诺需要最少花费多少冰块。
输入的第一行包括三个正整数 n,m,l,base ,分别表示节点的个数、边的个数、所有通道的颜色种类数量,通行卡改变颜色时的费用倍率。
接下来 m 行,表示该隙间交通网络的总边数。每一行给出三个正整数 u,v,col,w ,表示一条从 u 到 v 、颜色为 col 、支付冰块数为 w 的有向边。
如果不存在任何方案,则输出一行一个整数 −1 。否则输出整数,表示在最优决策下,琪露诺从 1 到达 n 最少花费的冰块数。
4 6 3 2
1 2 1 3
1 3 3 2
2 4 2 2
3 4 1 3
2 3 1 10
3 2 3 5
7
10 1 1 1
1 2 1 14
-1
对于第一个样例,最佳路径为 1→2→4 ,颜色变化为 1→2 ,费用为 3+2×2=7 。
对于第二个样例,由于没有从 1 到达 v 的路径,因而无解。
对于 20% 分数的数据有:l=1 。
对于 20% 分数的数据有:n≤100 。
对于 100% 的测试点,保证 1≤n≤5×103,1≤m≤3×105,1≤l≤64,2≤base≤4 。
对于 100% 的测试点,保证 1≤u,v≤n ,1≤col≤l,1≤w≤108 ,保证没有自环。
一看就是dp的题 但我不会
输出-1可以骗1分 over
7-7 简单的背包问题 分数:20
这是一个背包问题。
你有n个物品,其中第i个物品的重量为wi,价值为vi。
现给定Q次询问,每次询问给出一个背包上限W,在总重量不超过背包上限W的情况下,最大化装入背包的物品的价值。
第一行包含一个正整数 n,n表示物品数量。
接下来n行,每行给出两个正整数wi,vi,其中第i个wi表示第i个物品的重量,第i个wi表示第i个物品的价值。
接下来有一个数Q,表示询问次数。
每次询问只有一行,包含一个正整数W,W的意义见题目描述。
输出Q行,第i行表示第i次询问的答案。
2
2 3
3 4
4
2
3
4
5
3
4
4
7
对于30%的数据,1≤n≤10,1≤wi≤100,1≤vi≤100,1≤Q≤1000,1≤W≤1000。
对于60%的数据,1≤n≤100,1≤wi≤100,1≤vi≤100,1≤Q≤1000,1≤W≤10000。
对于100%的数据,1≤n≤100,1≤wi≤109,1≤vi≤100,1≤Q≤105,1≤W≤1011。
乍一看好像就是一个动态规划---背包的题目 但是数据范围太大了 正解用了二分
我只会裸背包 所以暴力12分
用背包的模板就可以有12分
#include
using namespace std;
#define ll long long
ll n;
ll w[100005],v[100005];
ll dp[100005];
ll Q;
ll W;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>v[i];
}
cin>>Q;
while(Q--)
{
cin>>W;
//每一次都要重置dp数组 否则会出问题
for(int i=1;i<=W;i++)
{
dp[i]=0;
}
//背包模板
for(int i=1;i<=n;i++)//背包个数
{
for(int j=W;j>=w[i];j--)//从背包容量开始往下循环
{
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
cout<
7-8 響符「パワーレゾナンス」 分数:25
幽谷响子最近在妖怪之山中依靠回声朗诵经文。
她事先已经朗诵过 n 篇经文,其中第 i 篇经文回声的响度为 ai 。由于城管正在妖怪之山泡温泉,因而她计划在执行完 q 次操作后立刻离开。
响子酱的操作有以下两种:
1 l r
:表示响子酱根据所有满足 l≤i≤r 的经文回声响度 ai ,再次进行朗诵,即 ai=F(ai);2 l r
:表示响子酱接收所有满足 l≤i≤r 的的经文响度 ai 后,在本子上记录下一行,一行只有一个数字,表示 ∑i=lrai ,即经文响度之和。其中,响子再次朗诵经文的操作 F(x) 表示如下。
F(x)=2⌊3x2+1∣x3−3x∣⌋
在响子执行完 q 次操作以后,她在本子上记录的内容是什么呢?
⌊x⌋ 为向下取整,即 ⌊1.9⌋=1,⌊2⌋=2 。
第一行,两个正整数 n,q ,分别表示响子酱朗诵的经文数与其操作数。
第二行,给出 n 个整数,表示响子酱事先朗诵经文的响度 ai ,i 从 1 开始。
接下来 q 行,每行给出三个正整数 opt,l,r 。
对于每一个 opt=2 的操作,输出单独一行一个数字,表示询问区间 [l,r] 经文的响度之和 ∑i=lrai。
1 3
114
2 1 1
1 1 1
2 1 1
114
74
5 5
114 514 1919 810 495
2 1 5
1 1 4
2 4 5
1 3 5
2 2 4
3852
1033
1550
对于第一个样例,其计算过程如下:
F(114)=2×⌊3×1142+1∣1143−3×114∣⌋=2×⌊389891481202⌋=2×37=74
对于 20% 分数的数据,保证 1≤n,q≤102 。
对于 40% 分数的数据,保证 1≤n≤5×104,1≤q≤105 。
对于 100% 的数据,保证 1≤n≤105,1≤q≤3×105。
对于所有的 ai ,保证 0≤ai≤106 。
对于所有的 opt ,保证 opt∈{1,2} 。
对于所有的 l,r ,保证 1≤l≤r≤n 。
这个要用线段树 但是好长哦 不太会
根据题意模拟能5分
用快读加速一下能8分 快读yyds
#include
using namespace std;
#define ll long long
ll n,q;
ll a[100005];
inline ll read()//快速读入的模板
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
ll F(ll x)//模拟题目的函数
{
return 2*(abs(x*x*x-3*x)/(3*x*x+1));
}
int main()
{
//cin>>n>>q;
n=read();
q=read();
for(int i=1;i<=n;i++)
{
//cin>>a[i];
a[i]=read();
}
while(q--)
{
int op;
//cin>>op;
op=read();
ll l,r;
//cin>>l>>r;
l=read();
r=read();
if(op==1)
{
//暴力循环他丫的
for(int i=l;i<=r;i++)
{
a[i]=F(a[i]);
}
}
else if(op==2)
{
ll sum=0;
for(int i=l;i<=r;i++)
{
sum+=a[i];
}
cout<
7-9 平方数 分数:25
贝贝有一个长度为 n 的序列 A,第 i 个元素为 Ai,贝贝现在需要选出一些下标,并且需要使得选出的这些下标中没有任意一对 (i,j) 下标对应的 Ai×Aj 是一个平方数,你需要输出贝贝最多能选出多少个下标。
第一行,一个数字 n 表示数组长度
第二行, n 个正整数表示给定的 A 序列。
一行一个整数表示最多能选出的下标个数。
5
1 1 2 3 4
3
7
1 3 2 5 4 9 1
4
对于 32% 分数的数据有 : n≤1000,Ai≤106
对于 60% 分数的数据有 : n≤105,Ai≤106
对于 100% 分数的数据有 :1≤n≤105,1≤Ai≤109
考试的时候没啥思路 但是能骗分 从0开始往上一个个输出 或者从n往下一个个减小输出
输出n-2就能骗3分
7-10 贝贝的石子游戏 分数:30
贝贝在玩一个石子游戏。n个石子按从左往右的顺序排成一行,每个石子有一个重量和一个类型,类型分为A
和B
两种。其中第i个石子的类型为si,其重量为wi。
在这个过程中,你的得分如下:
贝贝的目标是最大化最终的得分。但是众所周知贝贝是个菜狗,于是他向聪明的你寻求帮助,请你写一个程序告诉他得分的最大值为多少。
第一行,包含一个整数 n。
第二行,包含一个长为 n 的字符串 S=s1s2⋯sn,每个字符只可能为 A
或 B
,描述该石子的类型。
第三行,包含 n 个整数 w1,w2,⋯,wn,描述每个石子的重量。
仅一行,包含一个整数,表示最大的得分。
3
ABA
1 2 3
2
7
AABBABA
2 4 5 1 3 7 6
12
【评测用例规模与约定】
对于至少 10% 分数的数据有:1≤n≤3
对于至少 20% 分数的数据有:1≤n≤8
对于至少 30% 分数的数据有:1≤n≤20
对于至少 50% 分数的数据有:1≤n≤1000
对于至少 70% 分数的数据有:1≤n≤105
对于 100% 的数据有:1≤n≤106,1≤wi≤109。
传说中给验题人做的压轴题
但是一看范围 诶嘿 最小是n<=3
那可以先枚举一下n=1 2 3 的情况 看看会发生什么 然后就骗了3分
#include
using namespace std;
int a[100];
int main()
{
int n;
cin>>n;
string s;
cin>>s;
int maxn=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
if(n==1)//只有一种可能
{
cout<<0<
全屏浏览题目
切换布局