• 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;
    }

     

  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/1227xq/p/14791925.html
Copyright © 2020-2023  润新知