备战蓝桥杯---搜索(应用基础1)

news/2024/7/20 20:28:19 标签: 蓝桥杯, 深度优先, c++, 算法

话不多说,直接看题:

显然,我们直接用深搜,我们可以先把空位用结构体存,然后打表存小方块,再用数组存行列。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int a[12][12];
int biao[20][20]={{0,0,0,0,0,0,0,0,0,0},
                  {0,1,1,1,2,2,2,3,3,3},
                  {0,1,1,1,2,2,2,3,3,3},
                  {0,1,1,1,2,2,2,3,3,3},
                  {0,4,4,4,5,5,5,6,6,6},
                  {0,4,4,4,5,5,5,6,6,6},
                  {0,4,4,4,5,5,5,6,6,6},
                  {0,7,7,7,8,8,8,9,9,9},
                  {0,7,7,7,8,8,8,9,9,9},
                  {0,7,7,7,8,8,8,9,9,9}
                 };
int ck[20][20];
int lie[12][12],hang[12][12];
struct node{
    int x,y;
}b[200];
int cnt;
void print(void){
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}
void dfs(int deep){
    if(deep>cnt){
        print();
        return ;
    }
    else{
        for(int i=1;i<=9;i++){
            if(lie[b[deep].y][i]==0&&hang[b[deep].x][i]==0&&ck[biao[b[deep].x][b[deep].y]][i]==0){
                lie[b[deep].y][i]=1;
                a[b[deep].x][b[deep].y]=i;
                hang[b[deep].x][i]=1;
                ck[biao[b[deep].x][b[deep].y]][i]=1;
                dfs(deep+1);
                lie[b[deep].y][i]=0;
                hang[b[deep].x][i]=0;
                ck[biao[b[deep].x][b[deep].y]][i]=0;
            }
        }
    }
}
int main(){
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
            cin>>a[i][j];
            if(a[i][j]!=0){
                lie[j][a[i][j]]=1;
                hang[i][a[i][j]]=1;
                ck[biao[i][j]][a[i][j]]=1;
            }
            else{
                b[++cnt].x=i;
                b[cnt].y=j;
            }
        }
    }
    dfs(1);
}

值得注意的,我们其实可以三个判断容器排个序,选出约束条件最多的先枚举,这样虽然复杂度还是一样,但是按照这个顺序就可以更快的确定约束条件多的从而减少不必要的递归次数。

我们可以举个例子:

接题:

下面为分析:

我们写出4与7的组合然后分段计算即可,下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
long long l,r;
long long a[7000];
int cnt;
bool cmp(long long a,long long b){
    return a<b;
}
void dfs(int deep){
    if(deep>500000000000LL) return ;
    a[cnt++]=deep;
    dfs(10*deep+4);
    dfs(10*deep+7);
}
signed main(){
    cin>>l>>r;
    dfs(0);
    sort(a+1,a+cnt,cmp);
    int l1=lower_bound(a+1,a+cnt,l)-a;
    int r1=lower_bound(a+1,a+cnt,r)-a;
    long long sum=0;
    if(l1!=r1){
    sum+=(a[l1]-l+1)*a[l1];
    for(int i=l1+1;i<=r1-1;i++){
        sum+=(a[i]-a[i-1])*a[i];
    }
   sum+=(r-a[r1-1])*a[r1];}
    else{
        sum=a[r1]*(r-l+1);
    }
    cout<<sum;
}

看道有趣的题:

可以用并查集,最后判断与下表面连的点与上表面连的点是否在同一个集合,这里采用BFS,先把与上表面相连的点放队里,在判断与他们相连的点,下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int t,n,h,r,b[1010];
struct node{
    int x,y,z;
}a[1010];
int check(node a,node b){
    if(pow(a.x-b.x,2)+pow(a.y-b.y,2)+pow(a.z-b.z,2)<=4*pow(r,2)){
        return 1;
    }
    return 0;
}
int main(){
    cin>>t;
    while(t--){
        memset(b,0,sizeof(b));
        queue<node> q;
        int f=0;
        scanf("%d%d%d",&n,&h,&r);
        for(int i=1;i<=n;i++){
            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
            if(r+a[i].z>=h){
                q.push(a[i]);
                b[i]=1;}
        }
        while(!q.empty()){
            node s=q.front();
            q.pop();
            if(s.z-r<=0){
                f=1;
                break;
            }
            for(int i=1;i<=n;i++){
                if(b[i]==0&&check(a[i],s)==1){
                  q.push(a[i]);
                  b[i]=1;
                }
            }
        }
        if(f) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}


http://www.niftyadmin.cn/n/5365123.html

相关文章

在线JSON转SQL工具

在线JSON转SQL - BTool在线工具软件&#xff0c;为开发者提供方便。在线JSON转SQL工具可以将JSON文件中的数据或者JSON对象转换为SQL插入语句&#xff0c;方便用户将数据导入到数据库中。用户可以通过简单的界面上传JSON文件&#xff0c;或者文本框输入&#xff0c;点击JSON转S…

十八、K8S-亲和性和反亲和性

目录 k8s中亲和性和反亲和性 一、固定节点调度 1、nodeSelector&#xff08;通过标签选择方式调度&#xff09; 2、nodeName调度&#xff08;通过指定节点名称的方式&#xff09; 二、node亲和性 1、node 硬亲和性 2、node软亲和性 三、pod亲和性 1、pod硬亲和性 2、…

语言革命:NLP与GPT-3.5如何改变我们的世界

文章目录 &#x1f4d1;前言一、技术进步与应用场景1.1 技术进步1.2 应用场景 二、挑战与前景三、伦理和社会影响四、实践经验五、总结与展望 &#x1f4d1;前言 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能领域的一个重要分支…

树莓派-Ubuntu22.04

树莓派 1 安装Ubuntu系统2 ssh登录3 配置3.1 安装软件3.2 换源3.3 安装桌面3.4 开机脚本 1 安装Ubuntu系统 通过制作sdk&#xff0c;使系统在sdk中运行&#xff1a; 下载制作软件&#xff1a;https://www.raspberrypi.com/software/ 下载Ubuntu镜像&#xff1a;https://cn.ub…

开源软件全景解析:驱动技术创新与行业革新的力量

目录 什么是开源 开源的核心 开源软件的特点 为什么程序员应该拥抱开源 1.学习机会&#xff1a; 2.社区支持&#xff1a; 3.提高职业竞争力&#xff1a; 4.加速开发过程&#xff1a; 5.贡献和回馈&#xff1a; 开源软件的影响力 开源软件多元分析&#xff1a; 开源…

洛谷:P2957 [USACO09OCT] Barn Echoes G

题目描述 The cows enjoy mooing at the barn because their moos echo back, although sometimes not completely. Bessie, ever the excellent secretary, has been recording the exact wording of the moo as it goes out and returns. She is curious as to just how mu…

ObjectMapper之处理JSON序列化和反序列化

目录 基本示例Java 对象转 JSON 字符串&#xff08;序列化&#xff09;JSON 字符串转 Java 对象&#xff08;反序列化&#xff09; 高级特性忽略未知属性使用注解自定义序列化 当然可以。让我们通过更详细的例子来探索 ObjectMapper 的使用&#xff0c;包括基本的序列化和反序…

P9240 [蓝桥杯 2023 省 B] 冶炼金属--2024蓝桥杯冲刺省一

点击跳转例题 思路&#xff1a;最开始读完题&#xff0c;我们知道求最小值最大&#xff0c;和最大值最小。是符合二分的性质的&#xff0c;但是我们再一思考可以发现这是简单的数学。 求每条记录的最小值&#xff1a;a/&#xff08;b1&#xff09;1。可以发现 a%b的情况下&…