训练情况
赛后反思
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;
}