官方题解 | 飞翔杯基础组
2024-12-16 16:19:24
发布于:浙江
前言
本次飞翔杯的基础组题解,总体难度属于入门~普及的难度
T1 偷吃
题目大意
给出包含个整数的序列,进行次操作,每次删除其中的,并将到中的所有元素前挪一位变为,末尾变为0。
题解思路
根据题目意思模拟即可,方法很多,本处选择使用数组模拟,使用数组模拟可以参考以下思路。
- 输入个数字至数组当中
- 若满足 则输出至的数字,同时补上个0在末尾 。
- 若满足 则输出个0 。
参考代码
#include <bits/stdc++.h>
using namespace std;
int n,k,a[105];
int main() {
cin >> n >> k;
for(int i=1;i<=n;i++) cin >> a[i];
if(k > n){
for(int i = 1; i <= n; i++)cout << "0" << " " ;
}else {
for(int i = k + 1; i <= n; i++)cout << a[i] << " ";
for(int i = 1; i <= k; i++)cout << "0" << " ";
}
return 0;
}
T2 InternetShop
题目大意
给出个数字,找到第一个大于的数字。否则输出-1
.
题解思路
在题目给出的个数字之中,针对于,for循环枚举从左往右找到比他更大的第一个即,否则输出。
参考代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> h(n);
for(int i = 0; i < n; i++) cin >> h[i];
for(int i = 1; i < n; i++) {
if(h[i] > h[0]) {
cout << i + 1 << endl;
return 0;
}
}
cout << -1 << endl;
}
T3 Yuilice的盛大party
题目大意
给出个游戏,每场游戏共有名参与者,同时给出他们编号,要求你记录下每个人之间是否有共同做过游戏,最后根据所有人是否都两两做过游戏输出Yes
或No
。
题解思路
我们可以使用二维数组来管理第人与第人是否参与了一个游戏,对于每一场游戏我们都可以根据参与人数的编号来更新他们之间的关系,让二维数组记录下第人与第人是否参与了一个游戏。
最终需要时间复杂度。
参考代码
#include <bits/stdc++.h>
using namespace std;
bool arr[101][101];
int main()
{
int n,m;
cin >> n >> m;
for(int i=0;i<m;i++){
int k;
cin >> k;
int arr[k];
for(int j=0;j<k;j++){
cin >> arr[j];
}
for(int a=0;a<k;a++){
for(int b=a+1;b<k;b++){
int p=arr[a];
int q=arr[b];
arr[p][q]=true;
}
}
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(arr[i][j]==false){
cout << "No";
return 0;
}
}
}
cout << "Yes" << endl;
return 0;
}
T4 Red And Green
题目大意
给定两个水桶,体积为与,并且于,可以进行三种操作
- 倒空水
- 倒给,满或为空为止
- 灌满水
求解次操作后,有多少水还在两个水桶当中。
题解思路
我们设定分别代表此时两个桶的水量,其中代表红色水桶, 代表绿色水桶,来模拟其中的操作。
如果,则设置,同理,如果,则设置.
如果都不满足,则执行将当中的水倒入当中,需要移动的毫升为毫升或毫升,取最小值,所以只需要让倒入的水即可,那么结果为 增加, 减少。
因为,因此暴力模拟即可。
参考代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int k,r,g;
int x=0,y=0,z;
cin>>k>>r>>g;
for(int i=0;i<k;i++){
if (x==r)x=0;
else if(y==0)y=g;
else{
z=min(r-x,y);
x+=z,y-=z;
}
}
cout<<x<<" "<<y<<endl;
return 0;
}
全部评论 1
可以看到也是非常的简单好吧
4天前 来自 浙江
0糖的没边
2天前 来自 广东
0
有帮助,赞一个