目录
题目:
题目描述:

题目链接:
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;
}