比赛链接
https://ac.nowcoder.com/acm/contest/80027
A: JMU-1
考察搜索的能力百度一下可知,2024 年天梯赛总决赛的比赛日为4 月 20日
参考代码
//2024 年天梯赛总决赛的比赛日为4 月 20日
void solve(){//A+20-7cout<<"H\n";
}
B:蛋仔派对高手
链接:牛客网-加密比赛,需输入邀请码报名才可提交
来源:牛客网
若本轮有 n 个蛋仔参与,第 1 名得分为 n 分, 第 2 名得分为 n−1 分,以此类推。贝贝想知道第 k 名小蛋仔的得分是多少?
答案:n-k+1
参考代码
void solve(){cin>>n>>m;cout<<n-m+1<<"\n";
}
C: 云享衣裳花想容
求中心圆环面积,同大大圆面积-小圆面积,代入公式直接计算
参考代码
void solve(){double pi=3.141592;int r1,r2; cin>>r1>>r2;printf("%.6lf\n",pi*(r2*r2-r1*r1));
}
D :记忆数字
计算文本中的单词长度,最后注意要对于每个单次模上10,题目说了只取个位的值
参考代码
bool check(char c){if(c>='A'&&c<='Z') return true;if(c>='a'&&c<='z') return true;return false;
}void solve(){string s;getline(cin,s);n=s.size();for(int i=0;i<n;i++) if(check(s[i])){int st=i++;while(i<n&&check(s[i])){i++;}cout<<(i-st)%10;}
}
E: 预测帕鲁
计算编号为x,y合成后帕鲁的最接近得值,如果出现了和两个帕鲁都接近选,取编号更小的
我们可以维护一个距离已有帕鲁的最小值,然后编号从小到大枚举,保证出现两个帕鲁都接近,选编号小的(也可以从大到小枚举,for循环的if语句给成k<=mi)
参考代码
void solve(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int p,q;cin>>p>>q;int tar=(a[p]+a[q]+1)/2;int id=-1,mi=INF; //记录最小的最近据库for(int i=1;i<=n;i++){int k=abs(a[i]-tar);if(mi>k) mi=k,id=i;}cout<<id;
}
F :统一命名规范
分三种情况模拟,驼峰,帕斯卡,下划线
变成驼峰保证开头字母小写,没有下划线
变成帕斯卡保证开头字母大写,没有下划线
变成下划线保证都是小写字母,和下划线组成
参考代码
void solve(){string opt; cin>>n>>opt;while(n--){cin>>s;int ns=s.size();for(int j=0;j<ns;j++){if(opt=="Camel"){ //userNameif(j==0&&s[j]>='A'&&s[j]<='Z') s[j]+=32;if(s[j]=='_'){s[j+1]-=32; continue;}}else if(opt=="Pascal"){//UserNameif(j==0&&s[j]>='a'&&s[j]<='z') s[j]-=32;if(s[j]=='_'){s[j+1]-=32; continue;}}else{ //Snake user_nameif(s[j]>='A'&&s[j]<='Z'){if(j) cout<<"_";s[j]+=32;}}cout<<s[j];}cout<<"\n";}}
G : 猜单词
字符串的长度为3,我们可以直接枚举长度为3的所有字符串,时间复杂度(26^3),然后统计满足5个要求的所有字符串
参考代码
void solve(){for(int i=0;i<5;i++) cin>>s[i]>>a[i]>>b[i];
// for(int i=0;i<5;i++) cout<<s[i]<<" "<<a[i]<<" "<<b[i]<<'\n';vector<string> ans;for(char c1='A';c1<='Z';c1++)for(char c2='A';c2<='Z';c2++)for(char c3='A';c3<='Z';c3++){int ok=1;for(int i=0;i<5;i++){int k1=0,k2=0;for(int j=0;j<3;j++){char c=s[i][j];if(c==c1||c==c2||c==c3) k1++;if(j==0&&c1==c) k2++;if(j==1&&c2==c) k2++;if(j==2&&c3==c) k2++;}if(k1!=a[i]||k2!=b[i]) ok=0;}string res; res+=c1; res+=c2; res+=c3;if(ok) ans.pb(res);}cout<<ans.size()<<"\n";for(string str:ans) cout<<str<<"\n";}
H: 创造花田的魔法
只需要考虑在原字符上,考虑需要种植哪些花朵
可以种植荷花,水仙,苍月草
种植荷花要本身就是湖泊,且它周围8个方向都是湖泊(字符L)
种植水仙要本身是青草(字符G),且周围有湖泊(字符L)没有房屋(字符H)
种植苍月松要本身就是青草(字符G),且周围没有房屋(字符H)
int n,m,K;
int opt,x,y,z;
char s[N][N],t[N][N];
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};//检查周围是否都是湖泊
bool check(int x,int y){int res=0;for(int i=0;i<8;i++){int bx=x+dx[i],by=y+dy[i];if(bx>=1&&by>=1&&bx<=n&&by<=m&&s[bx][by]=='L') res++; }return res==8; //周围都是湖泊
}int check2(int x,int y){int ok=1; //默认种植苍月草for(int i=0;i<8;i++){int bx=x+dx[i],by=y+dy[i];if(bx>=1&&by>=1&&bx<=n&&by<=m){if(s[bx][by]=='H') return -1; //周围有房屋,不能种植if(s[bx][by]=='L') ok=2; //记录周围有湖泊}}return ok;
}void solve(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%s",s[i]+1);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){t[i][j]=s[i][j];if(s[i][j]=='L'){ //湖泊及其周围都是湖泊,种植荷花if(check(i,j)) t[i][j]='S';}else if(s[i][j]=='G'){ //青草int opt=check2(i,j);if(opt==1) t[i][j]='B'; //苍月草使用`B`来表示)else if(opt==2) t[i][j]='N'; //水仙(水仙使用`N`来表示)}}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) printf("%c",t[i][j]);puts("");}
}