【蓝桥训练记录】第 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;
}
posted @ 2025-01-25 21:57  MNNUACM_2024ZY  阅读(24)  评论(0)    收藏  举报