zoukankan      html  css  js  c++  java
  • Try第十一届蓝桥杯

     第十一届蓝桥杯

    B 扩散

     首先考虑到bfs,但最终选择建立矩阵图、逐个染色+扫描,因为这相对前者省空间且易实现。

    ans:20312088

     1 #include<bits/stdc++.h>
     2 #define N 10000
     3 using namespace std;
     4 bool flg[N][N];
     5 long long ans;
     6 int a[4][2]={2020,2020,
     7             4040,2031,
     8             2031,2034,
     9             4020,4020};
    10 
    11 void work(int x,int y){
    12     for(int i=0;i<=2020;i++)
    13         for(int j=2020-i;j>=0;j--){
    14             flg[x+i][y+j]=1;
    15             flg[x-i][y+j]=1;
    16             flg[x+i][y-j]=1;
    17             flg[x-i][y-j]=1;
    18         }
    19 }
    20 
    21 int main(){
    22     for(int i=0;i<4;i++)
    23         work(a[i][0],a[i][1]);
    24     for(int i=0;i<=6060;i++)
    25         for(int j=0;j<=6060;j++)
    26             if(flg[i][j])
    27                 ans++;
    28     cout<<ans;
    29     return 0;
    30 }

    C 阶乘约数

    参考大佬  C题 - 阶乘约束 - 唯一分解定理 - 抓水母的派大星 - 博客园   %%%膜!

    ans:39001250856960000

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 long long ans=1;
     4 int a[110];
     5 
     6 void work(){
     7     for(int i=2;i<=100;i++){
     8         int t=i;
     9         for(int j=2;j<=t/j;j++){
    10             for(;t%j==0;t/=j)
    11                 a[j]++;
    12         }
    13         if(t>1)a[t]++;
    14     }
    15 }
    16 
    17 int main(){
    18     work();
    19     for(int i=2;i<=100;i++)
    20         if(a[i])
    21             ans*=(a[i]+1);
    22     cout<<ans;
    23     return 0;
    24 }

    D 本质上升序列

    参考大佬   本质上升序列-python-anderson13的博客  %%%膜!

    ans:3616159

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define N 200
     4 long long dp[210],ans;
     5 char a[210];
     6 
     7 int main(){
     8     cin>>a;
     9     for(int i=0;i<N;i++){
    10         dp[i]=1;
    11         for(int j=0;j<i;j++)
    12             if(a[j]<a[i])
    13                 dp[i]+=dp[j];
    14             else if(a[j]==a[i])
    15                 dp[i]-=dp[j];
    16         ans+=dp[i];
    17     }
    18     cout<<ans;
    19     return 0;
    20 }

    不是!哎呀我要裂开了啊,我这oier退役后啥都不会了

            

    我 好 菜 啊     这也太难了

    E 玩具蛇

    哇  Finally,终于有个会写的暴力了,dfs。

    ans:552

    #include<bits/stdc++.h>
    using namespace std;
    long long ans;
    bool b[5][5];
    int dr[4][2]={    {-1,0},
                 {0,-1},{0,1},
                    {1,0}};
    
    void dfs(int x,int y,int t){
        if(t==16){
            ans++;
            return;
        }
        int x2,y2;
        b[x][y]=1;
        for(int i=0;i<4;i++){
            x2=x+dr[i][0];
            if(x2<=0 || x2>4)
                continue;
            y2=y+dr[i][1];
            if(y2<=0 || y2>4)
                continue;
            if(!b[x2][y2])
                dfs(x2,y2,t+1);
        }
        b[x][y]=0; 
    }
    
    int main(){
        for(int i=1;i<=4;i++)
            for(int j=1;j<=4;j++)
                dfs(i,j,1);
        cout<<ans;
        return 0;
    }

     

    F 皮亚诺曲线距离

     递归

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    ll POW[110];
    
    ll calc(int k,ll x,ll y){
        if(!k)
            return 0;
        ll a,b;
        a=POW[k-1]*POW[k-1];
        b=POW[k-1];
        if(x<=b){
            if(y<=b){
                return calc(k-1,x,y);
            }
            else if(y<=b*2){
                return a+calc(k-1,b+1-x,y-b);
            }
            else{
                return a*2+calc(k-1,x,y-b*2);
            }
        }
        else if(x<=b*2){
            if(y<=b){
                return a*5+calc(k-1,x-b,b+1-y); 
            }
            else if(y<=b*2){
                x-=b,y-=b;
                return a*4+calc(k-1,b+1-x,b+1-y);
            }
            else{
                y-=b*2;
                return a*3+calc(k-1,x-b,b+1-y);
            }
        }
        else{
            if(y<=b){
                return a*6+calc(k-1,x-b*2,y);
            }
            else if(y<=b*2){
                x-=b*2;
                return a*7+calc(k-1,b+1-x,y-b);
            }
            else{
                return a*8+calc(k-1,x-b*2,y-b*2);
            }
        }
    }
    
    int main(){
        ll a,b,k,x1,y1,x2,y2;
        cin>>k>>x1>>y1>>x2>>y2;
        x1++;
        x2++;
        y1++;
        y2++;
        POW[0]=1;
        for(int i=1;i<=k;i++)
            POW[i]=POW[i-1]*3;
        a=calc(k,x1,y1);
        b=calc(k,x2,y2);
        cout<<abs(a-b);
        return 0;
    }

     

  • 相关阅读:
    07: mysql锁和事物隔离
    06: mysql索引查找原理及调优
    06: 字典、顺序表、列表、hash树 实现原理
    05:树结构
    02:MongoDB操作
    01:MongoDB基础
    02: CMDB设计思路
    二级制包安装Tomcat 与 RPM包安装Tomcat
    Docker的volume机制实现容器数据的持久性存储
    配置docker的私有仓库
  • 原文地址:https://www.cnblogs.com/1227xq/p/14791925.html
Copyright © 2011-2022 走看看