第十一届蓝桥杯官方AB组省内模拟赛

本次模拟赛数据来自民间,代码得分可能会有差异

题目分数
字节计算5/5
合法括号序列5/5
蓝桥单词8/8
无向连通图7/7
反倍数15/15
单词加密10/10
螺旋矩阵20/20
摆动序列25/25
村庄建设25/25
郊外植树27/30

A字节计算

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 15:58:09
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 16:03:08
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
int main()
{
    cout << (ll)(12.5*1024*1024) << endl ;
    return 0;
}

B合法括号序列

采用递推或暴力算一下

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 16:11:16
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 16:26:06
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}

int main()
{
    cout << "14" << endl ;
    return 0;
}

C蓝桥单词

组合问题,A出现两次,其他均出现一次。答案为7的阶乘/2的阶乘

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 16:11:16
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 16:26:38
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
int main()
{
    cout << 7*6*5*4*3 << endl ;
    return 0;
}

D无向连通图

连通图中树的边最少

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 16:26:45
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 16:27:55
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
int main()
{
    cout << 2018 << endl ;
    return 0;
}

E反倍数

数据太小直接模拟

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 16:28:16
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 16:28:26
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
int check(int x,int a,int b,int c)
{
    return (x%a&&x%b&&x%c);
}
int main()
{
    int n,a,b,c;
    cin >> n >> a >> b >> c;
    int cnt=0;
    for(int i=1;i<=n;i++)
        cnt+=check(i,a,b,c);
    cout << cnt;
    return 0;
}

F单词加密

同样是模拟

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 16:28:45
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 16:31:27
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
int main()
{
    string s;
    cin >> s;
    int len=s.size();
    for(int i=0;i<len;i++)
        s[i]=(s[i]-97+3)%26+97;
    cout << s << endl ;
    return 0;
}

G螺旋矩阵

模拟一遍顺序路径,并给二维数组赋值

/*
 * @Description:
 * @Autor: Kadia
 * @Date: 2020-08-04 16:32:30
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 16:53:29
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
int a[1005][1005];
int fxy[5]={0,0,1,0,-1};
int fxx[5]={0,1,0,-1,0};
int main()
{
    int n,m,r,c;
    cin >> n >> m >> r >> c;
    int toward=1;
    int cnt=1;
    int nowx=1,nowy=1;
    while(1)
    {
        a[nowy][nowx]=cnt++;
        if(nowy+fxy[toward]<=n&&nowy+fxy[toward]>=1&&nowx+fxx[toward]<=m&&nowx+fxx[toward]>=1&&a[nowy+fxy[toward]][nowx+fxx[toward]]==0)
        {
            nowy+=fxy[toward];
            nowx+=fxx[toward];
        }
        else
        {
            toward++;
            if(toward==5)
                toward-=4;
            if(nowy+fxy[toward]<=n&&nowy+fxy[toward]>=1&&nowx+fxx[toward]<=m&&nowx+fxx[toward]>=1&&a[nowy+fxy[toward]][nowx+fxx[toward]]==0)
            {
                nowy+=fxy[toward];
                nowx+=fxx[toward];
            }
            else
                break;
        }
    }
    cout << a[r][c] << endl ;
    return 0;
}

H摆动序列

flag[i]表示最后的一列数字为i的方式有多少种,递推到m
sum[i]表示最后一列的数字小于等于i的方式有多少种,最后的答案即为sum[n]。

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 17:02:00
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 20:02:28
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=10000;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
int n,m;
int flag[1005];
int sum[1005];
int main()
{
    cin >> m >> n;
    for(int i=1;i<=n;i++)
    {
        flag[i]=1;
        sum[i]=i;
    }
    for(int i=2;i<=m;i++)
    {
        if(i&1)
        {
            for(int j=1;j<=n;j++)
                flag[j]=sum[j-1];
            for(int j=1;j<=n;j++)
                sum[j]=(sum[j-1]+flag[j])%mod;
        }
        else
        {
            for(int j=1;j<=n;j++)
                flag[j]=(sum[n]-sum[j]+mod)%mod;
            for(int j=1;j<=n;j++)
                sum[j]=(sum[j-1]+flag[j])%mod;
        }
    }
    cout << sum[n] << endl ;
    return 0;
}

I村庄建设

建图求最小生成树

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 20:07:38
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 20:23:16
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
struct _edge
{
    int from;
    int to;
    double cost;
}edge[1000005];
bool cmp1(_edge a,_edge b)
{
    return a.cost < b.cost;
}
struct _city
{
    double x;
    double y;
    double h;
}city[1005];
int par[1005];
void init(int x)
{
    for(int i=0;i<=x;i++)
        par[i]=i;
}
int findroot(int x)
{
    if(par[x]==x)
        return x;
    else
        return par[x]=findroot(par[x]);
}
int same(int x,int y)
{
    return findroot(x)==findroot(y);
}
void mix(int x,int y)
{
    int rx=findroot(x);
    int ry=findroot(y);
    if(rx!=ry)
        par[ry]=rx;
}
int main()
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++)
        cin >> city[i].x >> city[i].y >> city[i].h;
    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            cnt++;
            _edge tmp;
            tmp.from=i;
            tmp.to=j;
            tmp.cost=sqrt((city[i].x-city[j].x)*(city[i].x-city[j].x)+(city[i].y-city[j].y)*(city[i].y-city[j].y))+(city[i].h-city[j].h)*(city[i].h-city[j].h);
            edge[cnt]=tmp;
        }
    }
    sort(edge+1,edge+1+cnt,cmp1);
    init(n);
    int q=n;
    double sum=0;
    for(int i=1;i<=cnt;i++)
    {
        if(q==1)
            break;
        if(!same(edge[i].from,edge[i].to))
        {
            sum+=edge[i].cost;
            mix(edge[i].from,edge[i].to);
            q--;
        }
    }
    printf("%.2f\n",sum);
    return 0;
}

J郊外植树

这题没过,只会用dfs(菜是原罪 ),群友告诉用可以用A*
27分代码

/*
 * @Description: 
 * @Autor: Kadia
 * @Date: 2020-08-04 20:53:49
 * @LastEditors: Kadia
 * @Connect: vx:ccz1354 qq:544692713
 * @LastEditTime: 2020-08-04 21:19:02
 */
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int mod=1000000007;
ll power(ll x,int y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,int y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
struct _circle
{
    int x;
    int y;
    int r;
    int flag[35];
}circle[35];
int ans=0;
int n;
int vis[35];
void dfs(int x,int sum)
{
    if(x>n)
    {
        ans=ans>sum?ans:sum;
        return ;
    }
    if(!vis[x])
    {
        vis[x]++;
        for(int i=1;i<=n;i++)
        {
            if(circle[x].flag[i]&&x!=i)
                vis[i]++;
        }
        dfs(x+1,sum+circle[x].r*circle[x].r);
        for(int i=1;i<=n;i++)
        {
            if(circle[x].flag[i]&&x!=i)
                vis[i]--;
        }
        vis[x]--;
    }
    dfs(x+1,sum);
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        memset(circle[i].flag,0,sizeof(circle[i].flag));
    for(int i=1;i<=n;i++)
        scanf("%d%d%d",&circle[i].x,&circle[i].y,&circle[i].r);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            circle[i].flag[j]+=(circle[i].r+circle[j].r>sqrt((circle[i].x-circle[j].x)*(circle[i].x-circle[j].x)+(circle[i].y-circle[j].y)*(circle[i].y-circle[j].y)));
        }
    }
    dfs(1,0);
    printf("%d\n",ans);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值