快捷搜索: 王者荣耀 脱发

第十三届蓝桥杯模拟赛(第一期)题解

(1)

直接从for循环从10000枚举到90000,如果i%128==0,答案就+1;

(2)

这题也是枚举就行。

(3)

奇数位置只能放对应的数字,偶数位置全排列,答案是10的阶乘。

(4)

这道题直接DFS一下就行,答案是4;

#include <bits/stdc++.h>
#define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
//const int N=1e6;
typedef long long ll;
using namespace std;
int a[20]={0,1,2,1,1,1,1,5,5,4,-1,-1,-2,-3,-1,-9};
int ans=INT_MIN;
void dfs(int i,int x,int sum)//i为第几步,x为台阶数,sum为得分
{
    if(i>=7)//超过7步了,不合法
    {
        return;
    }
    if(x==15)//到达第15层了
    {
        ans=max(ans,sum);
        return;
    }
    for(int j=1;j<=4;j++)
    {
        dfs(i+1,x+j,sum+=a[x+j]);
    }
}
int main()
{
    dfs(1,0,0);
    cout<<ans<<endl;
    return 0;
}

(5)

这题也是枚举。。三层for循环枚举i,j,k。

(6)

(7)

观察易得:行数i+列数j为偶数的被染成黑色。所以答案:奇数行的个数*奇数列的个数+偶数行的个数*偶数列的个数。

(8)

我们直接枚举a[i]-a[i-1],然后让这个长度去除以k,注意特判第一个和最后一个小块。

(9)

思维+组合数,第(n+1)/2一定是最大值n,我们只需要选(n-1)/2放到前面就行,选好了位置也就确定了,注意取模。

#include <bits/stdc++.h>
#define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
//const int N=1e6;
typedef long long ll;
const  ll mod=1000000007;
using namespace std;
ll n;
ll C(ll a,ll b)
{
    ll x=1;
    for(ll i=a,j=1;j<=b;i--,j++)
    {
        x=(x*i/j)%mod;
    }
    return x;
}
int main()
{
    cin>>n;
    n--;
    ll ans=C(n,n/2);
    cout<<ans<<endl;
    return 0;
}

(10)

BFS模板题,我们从任意一个1开始bfs,访问的地方都标记掉,bfs完成后,遍历st数组,如果遇到1的位置没有被标记过,一定不连通。

#include <bits/stdc++.h>
#define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
const int N=510;
typedef long long ll;
using namespace std;
char a[N][N];
int st[N][N];
int n,m;
int wy[4][2]={
         
  {1,0},{-1,0},{0,1},{0,-1}};
int qdx,qdy;
struct node{
    int x,y;
};
queue <node> q;
void bfs()
{
   st[qdx][qdy]=1;
   q.push({qdx,qdy});
   while(!q.empty())
   {
       node one=q.front();
       q.pop();
       for(int i=0;i<=3;i++)
       {
           int xx=one.x+wy[i][0],yy=one.y+wy[i][1];
           if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]==1&&st[xx][yy]==0)
           {
               st[xx][yy]=1;
               q.push({xx,yy});
           }
       }
   }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
            if(a[i][j]==1)
            {
                qdx=i,qdy=j;
            }
        }
    }
    bfs();
    int flag=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==1&&st[i][j]==0)
            {
                flag=1;
            }
        }
    }
    if(flag==1) cout<<"NO"<<endl;
    else cout<<"YES"<<endl;
    return 0;
}
经验分享 程序员 微信小程序 职场和发展