欢乐赛#54题解🎈🎈🎈🎈🎈🎈
2025-09-02 21:00:50
发布于:上海
欢乐赛全题解来啦!绝对AC绝对过
保姆级教程,绝对能懂
看完点个赞再走吧,作者肝了2个小时
#T1
代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
int x;
int main(){
cin>>x;
cout<<ceil(50*1.0*x/30);//50天的作业每天x小时,一共50*x小时,这些作业量要在30天内完成
return 0;//向上取整
//↑瑞腾林
}
#T2
代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
int a[100];//这里我选择数组存储4张牌(有点诡异了
int main(){
for(int i=1;i<=4;i++){//输入会吧
cin>>a[i];
}
int sum=0;//总数变量会吧
for(int i=1;i<=4;i++){
if(a[i]>=3 && a[i]<=13){//点数3到13的牌得加他的点数
sum+=a[i];//←像这样
}else if(a[i]==1){
sum+=15;//A:加十五
}else if(a[i]==2){
sum+=16;//2:加16
}else if(a[i]==14){
sum+=20;//小王:加20
}else if(a[i]==15){
sum+=25;//大王:加25
}
}
if(a[1]==a[2] && a[2]==a[3] && a[3]==a[4]){//如果四张牌相同
cout<<sum*5;//五倍
}else if(a[3]==14&&a[4]==15){//题目里说四张牌是非降序输入的,只要判断最后两张牌是不是王炸
cout<<sum+160;//加160
}else{
cout<<sum;//如果两种情况都不是那就直接输出总和即可
}
return 0;//瑞腾林
}
#T3
代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
int n;
double stx,sty;
double mx;//最大伤害
int main(){
cin>>n>>stx>>sty;//输入改装件数量,起始套装参数(注意是由起始套装、改装件组成)(本人被坑
while(n--){
double a,b;
cin>>a>>b;//输入套装
double x=stx+a,y=sty+b;//都得double
if(x>100){//如果暴击率大于100
y+=3*(x-100);//暴击伤害加成加上暴击率超出的部分乘上300%(即三倍)
x=100;//暴击率只剩100(相当于限制暴击率?
}
double bang=10000*(x/100)*(1+y/100)+10000*(1-x/100);//照着题目写就行
mx=max(mx,bang);//最大
}
cout<<mx;输出
return 0;//瑞腾林
}
#T4
代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;//名字
int sum;//打卡次数
};
string s;
vector<node>q;//向量
int main(){
while(cin>>s){//输入
int flag=0;//标志变量
for(int i=0;i<q.size();i++){遍历
if(q[i].name==s){查找名字已存在
q[i].sum++;加一次
flag=1;存在
}
}
if(flag==0){//要是不存在就让他存在
q.push_back({s,1});//推进去
}
}
for(int i=0;i<q.size();i++){//遍历输出,这样的存储结构就恰巧符合输出要求
ifq[i].name!="0")cout<<q[i].name<<" "<<q[i].sum<<endl;//排除掉最后的'0'即可
}
return 0;//瑞腾林
}
#T5
代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[110][110];//队列输入
int b[110];中转数组
int f[110][110];//最后结果
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];//输入
}
}
for(int i=1;i<=m;i++){
memset(b,0,sizeof(b));
for(int j=1;j<=n;j++){
b[j]=a[j][i];存下当前这个班
}
sort(b+1,b+1+n);//sort排序!!!!!!!哈哈
int sum=0;//一共有几个零呢?
for(int j=1;j<=n;j++){
if(b[j]==0){
sum++;//有这些零
}
}
for(int j=1;j<=n-sum;j++){//越过零,存到数组里
f[j][i]=b[j+sum];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(f[i][j]==0)cout<<" "<<0;//零要空3格输出,不然不符合题意
else cout<<" "<<f[i][j];//有数据的空1格输出
}
cout<<endl;//(保姆)换行 ~
}
return 0;//瑞腾林
}
#T6
代码及思路如下:
#include<bits/stdc++.h>
using namespace std;
string s;
long long mn=1e18;
int main(){
cin>>s;
for(int j=0;j<s.size();j++){
if(s[j]=='1'){//他是1就得试一下
s[j]='0';//假设把他变为零
long long sum=1;//求乘积
long long now=0;//综合
for(int i=0;i<s.size();i++){
if(s[i]=='0'){
now++;//有多少位0
}
if(s[i+1]=='1' || i==s.size()-1){//判断下一个是否为1或者是字符串最后一位
if(now!=0){//之前是零(这样就可以确认哩
sum=sum*now;//成绩
now=0;//重置
}
}
}
mn=min(mn,sum);//最小
s[j]='1';//变回去
}
}
cout<<mn;
return 0;//瑞腾林
}
全部评论 49
d
2025-09-02 来自 上海
0d
2025-08-31 来自 上海
02025-08-31 来自 上海
0蟹蟹
2025-08-31 来自 上海
0
d
2025-08-29 来自 上海
0d
2025-08-29 来自 上海
0d
2025-08-29 来自 上海
0ddd
2025-08-29 来自 上海
0ddd
2025-08-29 来自 上海
0ddd
2025-08-29 来自 上海
0ddd
2025-08-28 来自 上海
0ddd
2025-08-28 来自 上海
0ddd
2025-08-28 来自 上海
0ddd
2025-08-28 来自 上海
0ddd
2025-08-28 来自 上海
0ddd
2025-08-28 来自 上海
0ddd
2025-08-27 来自 上海
0帖子被置顶了太好了谢谢ac君
2025-08-27 来自 上海
0d
2025-08-27 来自 上海
0ddd
2025-08-26 来自 上海
0
有帮助,赞一个