目錄
題目:
題目描述:
題目鏈接:
思路:
思路詳解:
代碼:
代碼詳解:
題目:
題目描述:
題目鏈接:
P12340 [藍橋杯 2025 省 AB/Python B 第二場] 旗幟 - 洛谷
思路:
思路詳解:
定義cnt用于記錄A的數量,顯然一個完整的LANQIAO有兩個A。我的思路是先判斷每一行存在幾個完整的LANQIAO(或者它的變式),舉例來說,如果w=10,不管哪一行前7位就是完整的LANQIAO(或者它的變式),那么現在就有h*(w/7)*2。
然后再來計算每一行的不足完整LANQIAO的那一部分,第一層循環遍歷每一行,i從1開始。第二次循環遍歷不完整部分的每一個字母,定義LANQIAO為數組str,由題第一行從L開始(即數組索引0),第二行從A開始(即數組索引1),每行向左移動一個字符。可以發現每次開始的數組索引=行數i-1,不完整部分的字母個數為w%7,所以遍歷的循環條件可以寫為for(int j=i-1;j<i-1+w%7;j++)。但是不難發現這樣會發生訪問越界的情況,比如我們現在要訪問索引為7(按照我們的邏輯應該訪問的是L),但是數組str的最大索引為6(一共7個字母),所以為了防止訪問越界,我們可以改為j%7
代碼:
代碼詳解:
#include<bits/stdc++.h>
using namespace std;int main()
{int cnt=0;string str="LANQIAO";int h,w;cin>>h>>w;cnt+=h*(w/7)*2; //每一行*完整的LANQIAO個數*完整的LANQIAO有兩個A for(int i=1;i<=h;i++) //遍歷每一行 {for(int j=i-1;j<i-1+w%7;j++) //訪問不完整部分的每一個字母 {if(str[j%7]=='A') //防止訪問越界 {cnt++;}}}cout<<cnt<<endl;return 0;
}