蓝桥杯每日真题
拔河(√);
2022年第十三届蓝桥杯B组省赛真题
1.
统计子矩阵数(二维前缀和)(超时,需使用二维滑动窗口)
#include <bits/stdc++.h>
using namespace std;
const int X=1005;
int a[X][X],sum[X][X];
int main()
{
int N,M,K;int ans=0;
cin>>N>>M>>K;
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
cin>>a[i][j];
sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i][j];//二维前缀和
}
}
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)//遍历左上角坐标
{
for(int i1=i;i1<=N;i1++)
{
for(int j1=j;j1<=M;j1++)//遍历右下角坐标
{
int s=sum[i1][j1]-sum[i-1][j1]-sum[i1][j-1]+sum[i-1][j-1];
if(s<=K)
{
ans++;
}
}
}
}
}
cout<<ans;
return 0;
}
2.
顺子日期
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n=0;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=1;i<13;i++)
{
int a[4];
a[0]=i/10;
a[1]=i%10;
for(int k=1;k<=month[i];k++)
{
a[2]=k/10;
a[3]=k%10;
if((a[1]-a[0]==1&&a[2]-a[1]==1)||(a[2]-a[1]==1&&a[3]-a[2]==1))
{
n++;
}
}
}
cout<<n;
return 0;
}
3.
刷题统计
#include <iostream>
using namespace std;
#define int long long
signed main()
{
int a,b,n;
cin>>a>>b>>n;
int x=n/(a*5+b*2);
int y=n%(a*5+b*2);
int c=0;
int day[8]={0,a,a,a,a,a,b,b};
while(y>0)
{
y-=day[++c];
}
int num=c+x*7;
cout<<num;
return 0;
}
4.
修剪灌木
(只有向左或向右,最终回到起点)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
cin>>N;
for(int i=1;i<=N;i++)
{
cout<<max(i-1,N-i)*2<<endl;
}
return 0;
}
5.X 进制减法
(对于i位上的数字num[i],转化为十进制就等于num[i]*低于i位的所有进制)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N_=1e5;
signed a[N_],b[N_];
int MOD=1e9+7;
signed main()
{
int x;//x进制
int y=1;
int num=0;
int N,Ma,Mb;
cin>>N>>Ma;
for(int i=Ma;i>0;i--)
{
cin>>a[i];
}
cin>>Mb;
for(int i=Mb;i>0;i--)
{
cin>>b[i];
}
for(int i=1;i<=max(Ma,Mb);i++)
{
x=max(2,max(a[i],b[i])+1);//最小进制位二进制
num=(num+(a[i]-b[i])*y)%MOD;
y=(y*x)%MOD;//低于i位的所有进制乘积
}
num=num%MOD;
cout<<num;
return 0;
}