欢乐赛#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
昨天 来自 上海
0d
3天前 来自 上海
03天前 来自 上海
0蟹蟹
3天前 来自 上海
0
d
5天前 来自 上海
0d
5天前 来自 上海
0d
5天前 来自 上海
0ddd
5天前 来自 上海
0ddd
5天前 来自 上海
0ddd
5天前 来自 上海
0ddd
6天前 来自 上海
0ddd
6天前 来自 上海
0ddd
6天前 来自 上海
0ddd
6天前 来自 上海
0ddd
6天前 来自 上海
0ddd
6天前 来自 上海
0ddd
1周前 来自 上海
0帖子被置顶了太好了谢谢ac君
1周前 来自 上海
0d
1周前 来自 上海
0ddd
1周前 来自 上海
0
有帮助,赞一个