【蓝桥训练记录】第 25 场 蓝桥月赛
训练情况

赛后反思
几场比赛一起开导致不会做简单题了,CD感觉都不难
A题
蛇有十一画,直接输出 11
点击查看代码
#include <iostream>
using namespace std;
int main()
{
cout<<11;
return 0;
}
B题
我们发现无论是长宽除二,面积也会除二,但是这题除二的前提条件是为偶数,所以我们记录长宽能除的次数,再和面积除的次数比较,判断最后面积是否相等即可
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void solve(){
int n,x; cin>>n>>x;
for(int i = 1;i<=n;i++){
int a,b; cin>>a>>b;
if(a*b<x||(a*b)%x){
cout<<"No"<<endl;
continue;
}
int aa = a,bb = b;
int cnt1 = 0,cnt2 = 0,cnt3 = 0;
while(aa%2==0) aa/=2,cnt1++;
while(bb%2==0) bb/=2,cnt2++;
int res = a*b/x;
while(res%2==0) res/=2,cnt3++;
if(res==1 && cnt1 + cnt2 >= cnt3) 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; cin>>n;
int ma = 0,mi = INT_MAX;
for(int i = 1;i<=n;i++){
int x; cin>>x;
ma = max(ma,x);
mi = min(mi,x);
}
cout<<(ma+mi)/2<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
D题
数列变为有序,这题只需要求数列的第 \(k\) 大,我们先进行排序求出第 \(k\) 大,接下来遍历数列内的元素,如果当前位置不是第 \(i\) 大则需要操作一次移动到最后面,,否则就比较第 \(i+1\) 大,我们最后再考虑移动的顺序,让每次操作移动的元素满足有序即可
点击查看代码
#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),b(n + 1);
for(int i = 1;i<=n;i++) cin>>a[i],b[i] = a[i];
sort(b.begin() + 1,b.end());
int pos = 1;
int ans = 0;
for(int i = 1;i<=n;i++){
if(a[i] != b[pos]) ans++;
else pos++;
}
cout<<ans<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}

浙公网安备 33010602011771号