【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;
}
posted @ 2025-01-25 22:03  MNNUACM_2024ZY  阅读(178)  评论(0)    收藏  举报