题解 | ACGO欢乐赛#62
2025-12-15 19:38:12
发布于:江苏
本题解包括 ACGO欢乐赛#62 的所有题目:
| 题目编号 | 题目名称 | 题目难度 |
|---|---|---|
| T1 | 皓仔的上课迟到 | 入门 |
| T2 | 皓仔吃水果 | 入门 |
| T3 | 皓仔的数字分割 | 入门 |
| T4 | 皓仔的平行四边形计数 | 入门 |
| T5 | 皓仔数星星 | 入门 |
| T6 | 皓仔的BCD码 | 普及- |
T1 皓仔的上课迟到
题目大意
求出 过 分钟是几时几分。
解题思路
分别求出 过 分钟的时和分。
- 时:(每过 分钟小时数加一)
- 分:(每过 分钟分钟数归零)
参考代码
#include<iostream>
using namespace std;
int a;
int main(){
cin>>a;
printf("%d:%02d",18+a/60,a%60);
return 0;
}
T2 皓仔吃水果
题目大意
根据每个水果的重量范围求出皓仔总共吃了多少克水果。
解题思路
根据题意分类讨论每个水果吃了多少克。假设水果有 克:
- 当 时,皓仔会吃 克
- 当 时,皓仔会吃 克
- 当 时,皓仔会吃 克
答案最大是 克,需要开 。
参考代码
#include<iostream>
#define ll long long
using namespace std;
ll n,a,b,c,ans;
int main(){
cin>>n>>a>>b;
while(n--){
cin>>c;
if(c>=a&&c<=b)ans+=c;
else if(c>b)ans+=b;
}
cout<<ans;
return 0;
}
T3 皓仔的数字分割
题目大意
将一个数字串分为 位一段,最后一段的长度 。
解题思路
数字串从头到尾遍历一遍,如果当前遍历到的数字个数是 的倍数,那么输出空格,即分一段,再输出当前遍历到的数字。
记录遍历到的数字个数,初始 ,即遍历到了 个数字。
参考代码
#include<iostream>
using namespace std;
string s;
int k,cnt;
int main(){
cin>>s>>k;
cnt=0;
for(int i=0;i<s.size();++i){
if(cnt%k==0&&cnt)cout<<' ';
cout<<s[i];
++cnt;
}
return 0;
}
T4 皓仔的平行四边形计数
题目大意
求出 个数中选 个数组成平行四边形的方案数。
解题思路
枚举,当 时,最多有 种方案,不会超时。
判断 个数是否满足平行四边形的条件的方法( 个数为 ):
- 一共有三种情况: 和 和 ,满足其中之一即可
参考代码
#include<iostream>
using namespace std;
const int N=105;
int n,c[N],x,y,z,h,ans;
bool check(){
return x==y&&z==h||x==z&&y==h||x==h&&y==z;
}
int main(){
cin>>n;
for(int i=1;i<=n;++i)cin>>c[i];
for(int i=1;i<=n-3;++i){
x=c[i];
for(int j=i+1;j<=n-2;++j){
y=c[j];
for(int k=j+1;k<=n-1;++k){
z=c[k];
for(int p=k+1;p<=n;++p){
h=c[p];
if(check())++ans;
}
}
}
}
cout<<ans;
return 0;
}
T5 皓仔数星星
题目大意
求出有多少个给定的坐标不在每一个长方形内。
解题思路
枚举,将所有坐标遍历一遍,对于某个坐标,如果不在任何一个长方形内,最终的答案加一。
最多运行 次,不会超时。
参考代码
#include<iostream>
using namespace std;
const int N=250005,M=105;
int n,m,h,w,x[N],y[N],a[M],b[M],ans;
bool check(int idx){
for(int i=1;i<=m;++i){
if(x[idx]>=a[i]&&x[idx]<=a[i]+h-1&&y[idx]>=b[i]&&y[idx]<=b[i]+w-1)return false;
}
return true;
}
int main(){
cin>>n>>m>>h>>w;
for(int i=1;i<=n;++i)cin>>x[i]>>y[i];
for(int i=1;i<=m;++i)cin>>a[i]>>b[i];
for(int i=1;i<=n;++i){
if(check(i))++ans;
}
cout<<ans;
return 0;
}
T6 皓仔的BCD码
题目大意
将数字串转换为 编码。
解题思路
从前往后遍历数字串的每一个位置,输出对应的 位二进制即可。
参考代码
#include<iostream>
using namespace std;
string s;
int x;
void print(int a,int c){
if(c==4)return;
print(a/2,c+1);
cout<<a%2;
return;
}
int main(){
cin>>s;
for(int i=0;i<s.size();++i){
x=s[i]-'0';
print(x,0);
}
return 0;
}
全部评论 1
希望获奖
10小时前 来自 江苏
1








有帮助,赞一个