每日总结3.18

蓝桥杯每日真题

拔河(√);

 

 

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值