备战蓝桥杯--数论与搜索刷题2

news2024/10/10 22:18:42

话不多说,直接看题:

1.辗转相减法

我们不妨假设原等比数列a,a*(q/p),a*(q/p)^2....

那么x1,,,,xn就是其中的n项,xi/x1=(q/p)^b,假设最大比例为(q/p)^k,,那么一定有(q/p)^(k*s)=(q/p)^b,即k是b的因子,这样子问题就成了求b1,...bn的gcd,那么我们如何求?

我们直接求b的gcd?但是我们知道(q/p)^b但不知道里面各个量是多少,因此无法求。

我们不妨先拆成q^b/p^b,就是求q^b的gcd,我们令f[q^b1][q^b2]=q^(b1,b2).

由(a,b)=(b,a-b)知f[q^b1][q^b2]=f[q^b2][q^b1/q^b2],这样递推即可。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=110;
int n;
LL a[N],b[N],x[N];
LL gcd(LL a,LL b){
	return b ? gcd(b,a%b) : a;
} 
LL gg(LL a,LL b){
	if (a < b) swap(a, b);
    if (b == 1) return a;
    return gg(b, a / b);
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++) cin>>x[i];
	sort(x,x+n);
	int cnt=0;
	for(int i=1;i<n;i++){
		if(x[i]==x[i-1]) continue;
		LL d=gcd(x[i],x[0]);
		a[cnt]=x[i]/d;
		b[cnt]=x[0]/d;
		cnt++;
	}
	LL up=a[0],down=b[0];
	for(int i=1;i<cnt;i++){
		up=gg(up,a[i]);
		down=gg(down,b[i]);
	}
	cout<<up<<"/"<<down;
}

2.扩展欧几里得:

转化一下就是:

解最小的正数x,xC-y*2^k=B-A

我们记C=a,2^k=b,那么x=x0+k*b/d;

这样我们把值%b/d+b/d即可。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL exgcd(LL a,LL b,LL &x,LL &y){
    if(b==0){
        x=1,y=0;
        return a;
    }
    LL d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
int main(){
    LL a,b,c,k;
    while(cin>>a>>b>>c>>k,a||b||c||k){
        LL x,y;
        LL z=1ll<<k;
        LL d=exgcd(c,z,x,y);
        if((b-a)%d) cout<<"FOREVER"<<endl;
        else{
            x*=(b-a)/d;
            z/=d;
            cout<<(x%z+z)%z<<endl;
        }
    }
}

3.递归

a|b表示选a或选b,括号即定义顺序,我们令&表示相连。

我们先看一下递归树,对于样例,有:

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int k;
string s;
int dfs(){
    int res=0;
    while(k<s.size()){
        if(s[k]=='('){
            k++;
            res+=dfs();
            k++;//跳过)
        }
        else if(s[k]=='|'){
            k++;
            res=max(res,dfs());
        }
        else if(s[k]==')') break;
        else{
            res++;
            k++;
        }
    }
    return res;
}
int main(){
    cin>>s;
    cout<<dfs();
}

4.重复覆盖问题:

先形象一下:

我们先看1,1要被覆盖,必选1,2,3,6(至少选一个),然后我们就枚举递归

我们考虑一下优化:

1.迭代加深:枚举下答案(答案1行不,不行的话2可以吗?)

2.我们先枚举选择最少的点(如4,只有5满足)

3.可行性剪枝:

先判断一下最少还要多少(相当于在1时把1236全选),将他与剩余的行数比较

4.位运算

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=110,M=1<<20;
int n,m,k;
vector<int> col[N];//每一列包含哪几行
int logg2[M];
int lowbit(int x){
    return x&-x;
}
int h(int state){//最少几行
    int res=0;
    for(int i=(1<<m)-1-state;i;i-=lowbit(i)){
        int c=logg2[lowbit(i)];
        res++;
        for(auto row:col[c]) i&=~row;
    }
    return res;
}
bool dfs(int dep,int state){
    if(!dep||h(state)>dep) return state==(1<<m)-1;//只有state满时才可能
    //找到选择min
    int t=-1;
    for(int i=(1<<m)-1-state;i;i-=lowbit(i)){
        int c=logg2[lowbit(i)];
        if(col[c].size()<col[t].size()||t==-1) t=c;
    }
    for(auto row:col[t]){
        if(dfs(dep-1,state|row)) return 1;
    }
    return 0;
}
int main(){
    cin>>n>>m>>k;
    for(int i=0;i<m;i++) logg2[1<<i]=i;
    for(int i=0;i<n;i++){
        int state=0;
        for(int j=0;j<k;j++){
            int c;
            scanf("%d",&c);
            state|=1<<(c-1);
        }
        for(int j=0;j<m;j++){
            if(state>>j&1){
                col[j].push_back(state);
            }
        }
    }
    for (int i = 0; i < m; i ++ )
    {
    sort(col[i].begin(), col[i].end());
    col[i].erase(unique(col[i].begin(), col[i].end()), col[i].end());//unique把重复元素放后,返回第一个重复的迭代器;
    }
    int dep=0;
    while(dep<=m&&!dfs(dep,0)) dep++;//迭代加深,层数就是选的糖果数
    if(dep>m) dep=-1;
    cout<<dep;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通用分布式锁组件

通用分布式锁组件 1 Redisson1.1介绍1.2 快速了解1.3 项目集成 2 定义通用分布式锁组件2.1 实现思路分析2.2 定义注解2.3 定义切面2.4 使用锁2.5.工厂模式切换锁类型2.5.1 锁类型枚举2.5.2 锁对象工厂2.5.3 改造切面代码 2.6 锁失败策略2.6.1 策略分析2.6.2 策略实现 2.7 基于S…

程序员们应注意的行业特有的法律问题

大家好&#xff0c;我是不会魔法的兔子&#xff0c;是一枚执业律师&#xff0c;持续分享技术类行业项目风险及预防的问题。 一直以来兔子都在以大家做项目时候会遇到的风险问题做分享&#xff0c;最近有个念头一直挥之不去&#xff0c;就是要不要给我们广大的程序员们也分享一…

从头开发一个RISC-V的操作系统(二)RISC-V 指令集架构介绍

文章目录 前提ISA的基本介绍ISA是什么CISC vs RISCISA的宽度 RISC-V指令集RISC-V ISA的命名规范模块化的ISA通用寄存器Hart特权级别内存管理与保护异常和中断 目标&#xff1a;通过这一个系列课程的学习&#xff0c;开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提…

探索设计模式的魅力:揭秘B/S模式在AI大模型时代的蜕变与进化

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#xff1a;探索设计模式的魅力&#xff1a;揭秘B/S…

Gateway是什么?(SpringCloudAlibaba组件)

1、网关介绍 **网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连&#xff0c;是最复杂的网络互连设备&#xff0c;仅用于两个高层协议不同的网络互连。**网关的结构也和路由器类似&#xff0c;不同的是互连层。网关既可以用于广域网互连&#xff0c;也可…

Springboot的日期类格式化

JsonFormat(pattern "yyyy-MM-dd HH:mm:ss", timezone "UTC") 这里是将UTC的时间进行格式化&#xff0c;效果如下&#xff1a; 可以发现DetectDate是detectDate的变种&#xff0c;因为detectDate是UTC时间&#xff0c;而DetectDate是被格式化得到的时间…

Redis 全景图(3)--- Redis 应用于缓存

前言 这是关于 Redis 全景图的最后一篇文章。因为一次写太多会限流&#xff0c;我也是没办法&#xff0c;才分成三篇文章来写。这篇文章是关于 Redis 应用于缓存的。 其实为什么要讲这个话题呢&#xff1f; Redis 应用在很多地方呀&#xff0c;为什么一定要挑着这个话题来讲呢…

【YOLOV5 入门】——构建自己的数据集模型训练模型检验

一、准备工作 1、数据收集 图片类型数据不用多说&#xff1b;视频类型数据利用opencv进行抽帧保存为一张张图片&#xff0c;这里选取30s的名侦探柯南片段进行试验&#xff0c;确保环境解释器下安装了opencv&#xff08;我使用的是另一个虚拟环境&#xff09;&#xff1a; im…

银行数字化转型导师坚鹏:银行数字化转型给支行带来的8大价值

银行数字化转型给支行带来的8大价值 银行数字化转型对不仅对总行、分行产生了深远影响&#xff0c;给总行、分行带来了新质生产力&#xff0c;对银行支行&#xff08;包括网点&#xff09;也会产生重要价值&#xff0c;银行数字化转型导师坚鹏从以下8个方面进行详细分析&#…

CANoe自带的TCP/IP协议栈中TCP的keep alive机制是如何工作的

TCP keep alive机制我们已经讲过太多次,车内很多控制器的TCP keep alive机制相信很多开发和测试的人也配置或者测试过。我们今天想知道CANoe软件自带的TCP/IP协议栈中TCP keep alive机制是如何工作的。 首先大家需要知道TCP keep alive的参数有哪些?其实就三个参数:CP_KEEP…

Android Studio学习9——使用Logcat打印日志

在Android开发中&#xff0c;Logcat是一个工具&#xff0c;它允许开发者查看设备或模拟器的日志信息。开发者可以使用Log类来打印日志信息&#xff0c;这对于调试和错误排查非常有帮助。 v 或 verbose: 最低等级&#xff0c;显示所有消息。d 或 debug: 用于调试消息。i 或 info…

2012年认证杯SPSSPRO杯数学建模B题(第二阶段)节能减排全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 节能减排、抑制全球气候变暖 B题 白屋顶计划 原题再现&#xff1a; 第二阶段问题   虽然环境学家对地球环境温度的改变有许多种不同观点&#xff0c;但大多数科学家可以达成一个基本的共识&#xff1a;近年来人类的活动&#xff0c;尤指二氧…

upload-labs训练平台

GitHub&#xff1a;GitHub - Tj1ngwe1/upload-labs: 一个帮你总结所有类型的上传漏洞的靶场 把下好的文件夹之间拖入到小皮的WWW目录下就可以之间访问网址使用了 目录 Pass-01(前端JS的绕过) (1)抓包绕过 (2)在前端绕过 Pass-02&#xff08;content-type绕过&#xff09;…

指针变量的类型

1.为什么指针变量要要求类型 当指针变量的类型跟存放的地址变量的类型不匹配时&#xff0c;当值变化时&#xff0c;地址增量也不同 #include <stdio.h> int main() {int a 0x1234;int *p&a;char *c&a;printf("p %p\n",p);printf("c %p\n"…

微软邮箱被锁住,该如何解除限制?

ChatGPT账号是微软邮箱注册的&#xff0c;我们在登陆微软邮箱时&#xff0c;http://www.outlook.com&#xff0c;不需要开魔法工具&#xff0c;直接就可以登陆&#xff0c;否则会出现安全验证&#xff0c;限制登陆。 那么如果账号被锁&#xff0c;我们该如何解除限制呢&#x…

云容器引擎CCE弹性伸缩

CCE弹性伸缩介绍 CCE的弹性伸缩能力分为如下两个维度&#xff1a; 工作负载弹性伸缩&#xff1a;即调度层弹性&#xff0c;主要是负责修改负载的调度容量变化。例如&#xff0c;HPA是典型的调度层弹性组件&#xff0c;通过HPA可以调整应用的副本数&#xff0c;调整的副本数会…

【mmDet3D】conda 环境中更新gxx

在安装mmdetection3d 相关依赖时&#xff0c;遇到如下报错&#xff1a; 之前在用openpcdet框架时也有过类似的问题&#xff0c;当时也记载过更新gc版本在conda里面的使用教程&#xff0c;但是今天发现其实有更简单的方法&#xff0c;如下图所示&#xff0c;直接使用conda来安装…

Flask Python:数据库多条件查询,flask中模型关联

前言 在上一篇Flask Python:模糊查询filter和filter_by&#xff0c;数据库多条件查询中&#xff0c;已经分享了几种常用的数据库操作&#xff0c;这次就来看看模型的关联关系是怎么定义的&#xff0c;先说基础的关联哈。在分享之前&#xff0c;先分享官方文档,点击查看 从文档…

【C++学习】哈希表的底层实现及其在unordered_set与unordered_map中的封装

文章目录 1. unordered系列关联式容器1.1 unordered_map1.2 unordered_set1.3.底层结构 2.哈希2.1哈希概念2.2哈希冲突2.3 哈希函数2.4 哈希冲突解决2.4.1闭散列2.4.1开散列2.5开散列与闭散列比较 3.哈希的模拟实现1. 模板参数列表2. 迭代器的实现3. 增加通过key获取value操作4…

【数据结构与算法】归并排序(详解:递归与非递归的归并排序 | 赠:冒泡排序和选择排序)

前言 本篇博客会对排序做一个收尾&#xff0c;将最经典的七大排序介绍完毕。 这次的重点正如标题&#xff0c;主要讲的是归并排序&#xff0c;还会带过相对简单很多的冒泡排序和选择排序。在最后还会给这七大排序做出一个时间复杂度和稳定性展示的总结收尾。同时&#xff0c;这…