動態

詳情 返回 返回

B4375 [藍橋杯青少年組省賽 2025] 慶典隊列&&B4376 [藍橋杯青少年組省賽 2025] 茶具套裝&&B4377 [藍橋杯青少年組省賽 2025] 平衡奇偶位置的字符交換 - 動態 詳情

好久不見,最近參加了藍橋的省賽,雖然只是省二,但是還是要總結一下

今兒個三合一,前三道

1.B4375 [藍橋杯青少年組省賽 2025] 慶典隊列

題目描述

\(n\) 名志願者參加了一場慶典活動,我們希望將這些人排成一個矩形隊列,要求隊列共有 \(A\) 行,且每一行的人數都要相等。

請計算每一行最多有多少名志願者。

注意:不一定要將所有的志願者都安排進隊列。

例如:\(n = 50\)\(A = 11\),表示要將 \(50\) 名志願者排成一個 \(11\) 行的矩形隊列,那麼每一行最多能安排 \(4\) 名志願者。

輸入格式

輸入兩個整數 \(n\)\(A\)\(2 \leq n \leq 500\)\(2 \leq A \leq n\)),分別表示志願者人數以及矩形隊列的行數,整數之間以一個空格隔開。

輸出格式

輸出一個整數,表示矩形隊列的每一行最多有多少名志願者。

輸入輸出樣例 #1

輸入 #1

50 11

輸出 #1

4

一眼弱智題,不想動腦,直接枚舉每一行人數,使它*行數<=總人數,最後再減1就好了

代碼如下:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    int ans=0;
    for(ans;ans*b<=a;ans++){
        
    }
    cout<<--ans;
    return 0;
}

2.B4376 [藍橋杯青少年組省賽 2025] 茶具套裝

題目描述

佳佳在一家茶具商店工作,有客户要訂購一些茶具套裝,一套完整的茶具套裝包含 \(1\) 個茶壺、\(1\) 個蓋碗、\(1\) 個茶漏以及 \(4\) 個茶杯。現在已知茶壺、蓋碗、茶漏和茶杯各自的數量,需要編寫一個程序來計算最多能夠組成多少套完整的茶具套裝。

例如:茶壺、蓋碗、茶漏和茶杯各自的數量分別是 \(3\)\(4\)\(2\)\(13\)。根據這些茶具的數量,佳佳最多能組成 \(2\) 套完整的茶具套裝。

輸入格式

輸入 \(4\) 個整數(\(0 \leq\) 整數 \(\leq 100\)),分別表示茶壺、蓋碗、茶漏和茶杯各自的數量,整數之間以一個空格隔開。

輸出格式zuiduan

輸出一個整數,表示最多能組成完整的茶具套裝數量。

輸入輸出樣例 #1

輸入 #1

3 4 2 13

輸出 #1

2

思路:

只要看其中每一種茶具分別能湊多少套,然後找其中最少的就好了

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    cout<<min({a,b,c,d/4});
    return 0;
}

3.B4377 [藍橋杯青少年組省賽 2025] 平衡奇偶位置的字符交換

題目描述

給定一個字符串 \(S\),其中僅包含字符 \(\tt A\) 和字符 \(\tt B\)。你每次可以選擇交換兩個位置相鄰的字符,請計算如果要使奇數位置上(位置從 1 開始)字符 \(\tt A\) 的數量等於偶數位置上字符 \(\tt A\) 的數量,最少需要進行多少次交換操作。

例如:\(S = \tt{AABABA}\),從左往右數,奇數位置上字符 \(\tt A\) 的數量為 \(1\)(位置 \(1\)),偶數位置上字符 \(\tt A\) 的數量為 \(3\)(位置 \(2\)\(4\)\(6\))。可將位置 \(2\) 的字符 \(\tt A\) 和位置 \(3\) 的字符 \(\tt B\) 交換。交換後,奇數位置上字符 \(\tt A\) 的數量和偶數位置上字符 \(\tt A\) 的數量都為 \(2\),滿足題目要求,故最少需要交換一次。

輸入格式

輸入一個字符串 \(S\)\(2 \leq S\) 的長度 \(\leq 10^5\)),其中僅包含字符 \(\tt A\) 和字符 \(\tt B\)

輸出格式

輸出一個整數,表示滿足題目要求的最少交換次數,如果無論怎麼交換都無法滿足題目要求,則輸出 \(-1\)

輸入輸出樣例 #1

輸入 #1

AABABA

輸出 #1

1

思路:

只要統計奇數位和偶數位上A的個數,算出他們的差值,就像兩個小朋友給糖果,多的給少的分,分到一樣就好了

注意:如果奇數位和偶數位上差值為奇數時,是無法給到相同的,所以由此可得一下代碼:

#include <bits/stdc++.h>
using namespace std;
int main(){
    string st,s;
    cin>>s;
    st+=" ";
    st+=s;
    int ji=0,o=0;
    for(int i=1;i<=int(st.size());i++){
        if(st[i]=='A'){
            if(i%2==1){
                ji++;
            }else{
                o++;
            }
        }
    }
    int mx=max(ji,o),mi=min(ji,o);
    if((mx-mi)%2==1){
        cout<<-1;
        return 0;
    }
    int ans=0;
    while(mx!=mi){
        mx--;
        mi++;
        ans++;
    }
    cout<<ans;
    //cout<<mx<<" "<<mi;
    //cout<<ji<<" "<<o; 
    return 0;
}

今天就到這裏,下次會寫後三道的,Danke!

Add a new 評論

Some HTML is okay.