Permutation and Primes 2023牛客暑期多校训练营8 J
登录—专业IT笔试面试备考平台_牛客网
题目大意:给出一个数n,要求构造一个n的排列,满足相邻两个数的差或和是一个奇质数
2<=n<=1e5
思路:要满足相邻数的差或和是奇质数的话只有三种情况,要么当前数a[i]=a[i-1]+prime[j]或a[i]=a[i-1]-prime[j]或a[i]=prime[j]-a[i-1]。
我们先随意设一个初值,不妨令a[1]=1,然后每一个位置都枚举质数也就是枚举j然后从上面三种情况里选一种,范围在1~n的且没有出现过的,构造一下发现大部分的n都能用此法构造出来,只有如n=12这种极少情况没有合法构造。
那么我们换一下a[1],令a[1]=2,发现n=12时有了合法构造,且发现无论是a[1]=1还是a[1]=2,用到的最大的质数就是13,那么我们猜想可以枚举极少的a[1]和质数就能得到合法答案,所以我们从1~n枚举第一个数,然后遍历后面的每一个位置,从小到大遍历质数,找到合法的数字就填进去,最后检验一下所有数字收否都出现过,如果不合法就换下一个a[1]。
赛后验证了a[1]要么等于1可以有合法构造,1如果不行2就能有合法构造,且用到的质数不超过5个也就是不大于13,时间复杂度O(10n)
#include<bits/stdc++.h>
//#include<__msvc_all_public_headers.hpp>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
const ll MOD = 998244353;
const int INF = 0x7fffffff;
ll n;
ll ans[N];
bool vis2[N];
int prime[2*N], tot = 0;
bool vis[2*N];
void getprime()
{//欧拉线性筛for (int i = 2; i <= 2*N; i++){if (!vis[i]){prime[++tot] = i;}for (int j = 1; j <= tot; j++){if (i * prime[j] >= 2*N)break;vis[i * prime[j]] = 1;if (i % prime[j] == 0)break;}}
}
void init()
{for (int i = 1; i <= n; i++){vis2[i] = 0;}
}
void solve()
{cin >> n;init();for (int ii = 1; ii <= 2; ii++){ans[1] = ii;vis2[ii] = 1;int ma = 0;for (int i = 2; i <= n; i++){for (int j = 2; j <= 6; j++){ma = max(ma, prime[j]);int now1 = ans[i - 1] + prime[j];int now2 = ans[i - 1] - prime[j];int now3 = prime[j] - ans[i - 1];//每个数有三种选择if (now1 <= n && !vis2[now1]){//找一种合法的ans[i] = now1;vis2[ans[i]] = 1;break;}else if (now2 >= 1 && !vis2[now2]){ans[i] = now2;vis2[ans[i]] = 1;break;}else if (now3 <= n && now3 >= 1 && !vis2[now3]){ans[i] = now3;vis2[ans[i]] = 1;break;}}}//cout << ma << endl;//for (int i = 1; i <= n; i++)//{//// if (!vis2[i])// {// cout << i << endl;// }//}bool flag = 1;for (int i = 1; i <= n; i++){//检验有没有没构造出来的数if (!vis2[i]){flag = 0;}vis2[i] = 0;}if (flag)break; }for (int i = 1; i <= n; i++){cout << ans[i] << " ";}cout << endl;
}
int main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);int t;cin>>t;getprime();while (t--){solve();}return 0;
}
相关文章:
Permutation and Primes 2023牛客暑期多校训练营8 J
登录—专业IT笔试面试备考平台_牛客网 题目大意:给出一个数n,要求构造一个n的排列,满足相邻两个数的差或和是一个奇质数 2<n<1e5 思路:要满足相邻数的差或和是奇质数的话只有三种情况,要么当前数a[i]a[i-1]pr…...
centos如何配置IP地址?
CentOS如何查看和临时配置IP地址 CentOS系统中,可以通过使用ifconfig命令来查看当前本机的IP地址信息。输入ifconfig即可显示当前网络接口的IP地址、网络掩码和网关信息。如果需要设置临时IP地址,可以使用ifconfig命令后接网卡名称和需要设置的IP地址、网…...
git clone 报错Filename too long
1.使用git clone代码,爆出Filename too long错误 2.原因分析 因为我很少看git clone日志,所以从未想过是clone异常,而且也看到代码clone下来了,所以我就显然以为代码clone成功,但是使用idea打开代码后发现大量代码无法…...
【雕爷学编程】Arduino动手做(184)---快餐盒盖,极低成本搭建机器人实验平台3
吃完快餐粥,除了粥的味道不错之外,我对个快餐盒的圆盖子产生了兴趣,能否做个极低成本的简易机器人呢?也许只需要二十元左右 知识点:轮子(wheel) 中国词语。是用不同材料制成的圆形滚动物体。简…...
redis String类型命令
Redis的String类型是一种简单的键值对数据结构,常用的String类型命令有: SET key value:设置指定key的值为value。GET key:获取指定key的值。DEL key:删除指定key及其对应的值。INCR key:将指定key的值加1…...
Blazor 简单组件(0):简单介绍
文章目录 前言说明环境安装 前言 Blazor 这个技术还是比较新,相关的UI组件还在完善,我这里提供一下我个人的组件开发。 说明 本UI组件是基于BootstrapBlazor(以下简称BB)开发。 BootstrapBlazor 文档 环境安装 C#小轮子:Visual Studio自…...
在vue3+vite项目中使用jsx语法
如果我掏出下图,阁下除了私信我加入学习群,还能如何应对? 正文开始 前言一、下载资源二、利用vite工具引入babel插件总结 前言 最近在为部署人员开发辅助部署的工具,技术栈是vue3viteelectron,在使用jsx语法时&#x…...
HCIA 路由器工作原理 及其 静态路由配置
目录 1、路由器工作原理 2、获取未知网段的方法: 3、静态路由 1)写法: 2)扩展配置 a、环回接口 配置命令: 环回接口的作用: b、手工汇总 手工汇总作用: c、路由黑洞 d、缺省路由 配置…...
【Git】—— git的配置
目录 (一)忽略特殊⽂件 (二)给命令配置别名 (一)忽略特殊⽂件 在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让Git知道呢…...
[git] git基础知识
git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目 git易于学习,性能极快 什么是版本控制? 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况,可以记录文件修改历史…...
【从零学习python 】15.深入了解字符串及字符集编码
文章目录 字符集字符和编码相互转换编码规则 学习目标成员运算符in运算符not in 运算符 进阶案例 字符集 计算机只能处理数字(其实就是数字0和数字1),如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bi…...
【LeetCode】打家劫舍||
打家劫舍|| 题目描述算法分析编程代码 链接: 打家劫舍|| 在做这个题之前,建议大家做一下这个链接: 按摩师 我的博客里也有这个题的讲解,名字是按摩师 题目描述 算法分析 编程代码 class Solution { public:int maxrob(vector<int>nums,int left,…...
【Nginx】Nginx的重定向——location
location 匹配URI location 匹配的规则和优先级;***重点 nginx常用的变量;要求掌握 rewrite 重定向;掌握/理解 location匹配:*** 正则表达式:匹配的是文件内容 常见的正则表达式:…...
每日一题——滑动窗口的最大值
滑动窗口的最大值 题目链接 暴力解法 最容易想到的当然还是通过两层循环来暴力求解:一层循环用来移动窗口,一层循环用来在窗口内找到最大值。这种做法的时间复杂度为O(kN),会超出时间限制,因此,我们要找到更加高效的…...
【使用go开发区块链】之获取链上数据(03)
上篇文章,我们完成了数据库的连接,本章节,我们将完成ethclient的配置以及初始化 1、ethclient配置 1.1、安装go-ethereum 在命令行终端输入下面代码安装: go get github.com/ethereum/go-ethereum1.2、Ethclient配置 1.2.1、新…...
js 动态设置transformOrigin
transformOrigin属性用于指定元素变换的原点。 // 获取要设置的元素 const element document.getElementById(your-element-id);// 设置transformOrigin属性 element.style.transformOrigin 50% 50%; // 以元素中心为原点// 或者使用变量来设置 const x 0; // x坐标 const …...
docker使用tab无法自动补全命令
本文参考链接 一、安装bash-complete 在线安装 yum install -y bash-completion二、刷新文件 source /usr/share/bash-completion/completions/docker source /usr/share/bash-completion/bash_completion...
既然jmeter也能做接口自动化,为什么还需要pytest自己搭框架?
今天这篇文章呢,我会从以下几个方面来介绍: 1、首先介绍一下pytest框架 2、带大家安装Pytest框架 3、使用pytest框架时需要注意的点 4、pytest的运行方式 5、pytest框架中常用的插件 一、pytest框架介绍 pytest 是 python 的第三方单元测试框架&a…...
Objective-C获取变量类型的方法
在Objective-C中,要获取一个对象的类型,可以使用[object class]方法。这将返回一个Class对象,表示该对象的类型。 另外,typeid是C中的关键字,用于获取一个变量的类型信息。在Objective-C中,typeid并不适用于…...
相机可见区域,使用鼠标拖拽模型
知识点 向量射线检测坐标转换 思路 使用射线检测获取射线检测点与模型对象之间的偏移量 (世界空间)使用相机的坐标转换获取检测点与鼠标位置之间的偏移量 (屏幕空间)拖拽时,更新模型位置 代码示例 using UnityEng…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
