【Atcoder训练记录】AtCoder Beginner Contest 390
训练情况

赛后反思
A题犯蠢冒泡排序写错,B题等比数列不能使用除法算公比,会有误差问题,成比例要用乘法比较
A题
我们观察到 12345 是有序的,所以我们对于给出的数列进行冒泡排序,次数为 1 次答案就为 YES 否则为 NO
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int a[10];
for(int i = 1;i<=5;i++) cin>>a[i];
int ans = 0;
for(int i = 1;i<=5;i++){
for(int j=2;j<=5;j++){
if(a[j-1] > a[j]){
swap(a[j-1],a[j]);
ans++;
}
}
}
if(ans == 1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
B题
判断一个数列是否为等比数列,我们算每一位的公比即可,除法会丢精度,需要用乘法进行比较,\(a_1\) : \(a_2\) = \(a_{i-1}\) : \(a_i\),内项积等于外项积,如果出现不满足答案为 NO,全部满足就是 YES
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void solve(){
int n; cin>>n;
vector<int> a(n + 1);
for(int i = 1;i<=n;i++) cin>>a[i];
bool flag = true;
for(int i = 3;i<=n;i++){
if(a[i-1]*a[2] != a[i] * a[1]) flag = false;
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
C题
判断黑色矩形,我们只需要求黑色块的上下左右边界,判断边界内是否存在 .,若存在则无法变成矩形,不存在则可以变成矩形
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int n,m; cin>>n>>m;
vector<string> s(n);
for(int i = 0;i<n;i++) cin>>s[i];
int x = -1,xx = INT_MAX,y = -1,yy = INT_MAX;
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
if(s[i][j] == '#'){
x = max(x,i);
xx = min(xx,i);
y = max(y,j);
yy = min(yy,j);
}
}
}
if(x == -1 || y == -1 || xx == INT_MAX || yy == INT_MAX){
cout<<"No"<<endl;
return;
}
bool flag = true;
for(int i = xx;i<=x;i++){
for(int j = yy;j<=y;j++){
if(s[i][j] == '.') flag = false;
}
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}

浙公网安备 33010602011771号