ACWing.第 128 场周赛 (B、C题解)

news2024/11/25 12:55:40

B、5286. 翻倍(思维+推导)

一、题目要求

给定两个正整数,初始时两数均为 1。

你可以进行任意次(也可以不进行)翻倍操作,每次操作任选一个非负整数 k,令两数中的一个数乘以 k,另一个数乘以 k^2。

请你计算,是否能够通过一系列操作,使得最终第一个数变为 a,第二个数变为 b。

输入格式

第一行包含整数 T,表示共有 T�组测试数据。

每组数据占一行,包含两个整数 a,b。

输出格式

每组数据输出一行结果,如果任务可以达成,则输出 Yes,否则输出 No

数据范围

前 33 个测试点满足 1≤T≤5。
所有测试点满足 1≤T≤350000,1≤a,b≤10^9。

输入样例:
4
2 4
75 45
8 8
16 16
输出样例:
Yes
Yes
Yes
No

二、思路(推导)

 根据算术基本定理 :每个正整数都可以唯一地分成若干质数的乘积 
考虑k>=2范围 ,且只需考虑k为质数的情况  
p1 p2 p3 ... pn
假设用了x1个p1,x2个p2 ...xn个pn
总的操作次数=x1+x2+..+xn
次数       a            b               c
              1            1                1
x1          p1^2      p1              p1^3      相当于有x1个p1的3次方相乘,即p1^(3*x1),以此类推
x2         p2          p2^2           p2^3
xn         pn         pn^2          pn^3
a*b=p1^(3x1)+p2^(3x2)+...+pn^(3xn);
1.x1<=x等价p1^x1能够整除a  p1^(x1)|a  x1(全分1次) <=x<=2x1(全分两次) 
2.x1<=y等价p1^x1能够整除b  p2^(x2)|b  x1(全分1次) <=y<=2x1(全分两次) 
3.x+y=3x1 x1=(x+y)/3 
x:代表1变换到a所用的次数,y:代表1变换到b所用次数
若x,y在x1~2x1之间,且满足(x+y)能整除3,则说明x1有解,代表它满足条件
t=p1^(x1/3) p2(x2/3)…p3(xn/3);(pi与pj之间两两互质且独立) t就相当ab开三次方根
x1=(x+y)/3;
t=p1^(x1/3) *p2(x2/3)*...*p3(xn/3);(pi与pj之间两两互质且独立) 
等价于 p1^(x1/3)|a   p1^(x1/3)|b(x|y代表x能y整除,即y%x==0)
等价于 a能够被t整数 t|a t|b
即:如果 t为整数,且a%t==0&&b%t==0,则一定有解 

三、代码

#include<bits/stdc++.h>
#define endl '\n'
typedef long long ll;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
const int N=2e5+10;
const int inf=0x3f3f3f3f;
int a,b;
void solve()
{
	cin>>a>>b;
    //int t=round(pow((LL)a*b,1.0/3));
    /*round(),将一个浮点数四舍五入到最接近的整数 3.4=3   3.6=4
如果参数x的小数部分>=0.5,则返回大于x的最小整数,否则返回小于x的最大整数 */ 
    int t=pow((ll)a*b,1.0/3)+1e-8;//可能会有精度问题 
	if(t*(ll)t*t==(ll)a*b&&a%t==0&&b%t==0)
	{
		cout<<"YES"<<endl;
	} 
	else
	{
		cout<<"NO"<<endl;
	}
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    {
       solve();
    }
    return 0;
} 

C、5287. 数量(组合数+dfs或者组合数+手动模拟)

一、题目要求

给定两个整数 n,k。

请你计算,一共有多少个长度为 n 的整数数组 a1,a2,…,an 能够同时满足:

  1. 数组 a 恰好是一个 1∼n的排列。
  2. 至少有 n−k个索引 i(1≤i≤n)满足 ai=i。
输入格式

共一行,包含两个整数 n,k。

输出格式

一个整数,表示满足条件的整数数组数量。

数据范围

前 44 个测试点满足 4≤n≤5,1≤k≤4。
所有测试点满足 4≤n≤1000,1≤k≤4。

输入样例1:
4 1
输出样例1:
1
输入样例2:
4 2
输出样例2:
7
输入样例3:
5 3
输出样例3:
31
输入样例4:
5 4
输出样例4:
76

 二、思路

1.思路

给出n个位置,只允许k个人不在自己的位置上,又因为k<=4,所以进行考虑的情况有k=0,2,3,4,可以手动模拟,也可以利用错排列公式。

2.错排列公式:

1.定义:考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,
那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)

2.公式:

 

 

3.推导过程

ans=c(n,k)*dfs(1,k) (组合数(o(1))*dfs(o(1))) 
1.k=0,则说明每个人都在自己的座位上说明只有一种情况
2.k=1,不可能只有1个人不在自己的座位上
3.k=2,c(n,2)*1
4.k=3,c(n,3)*2 
    1 2 3
  a.2 3 1
  b.3 1 2
5.k=4 c(n,4)*9
    1 2 3 4
  a.2 1 4 3
  b.2 4 1 3
  c.2 3 4 1
  d.3 1 4 2
  e.3 4 1 2
  f.3 4 2 1
  g.4 1 2 3
  h.4 3 1 2
  i.4 3 2 1

三、代码

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
const int N=1100;
const int inf=0x3f3f3f3f;
int a[N];
int n,k;
//int path[5];
bool st[5];
int dfs(int u,int n)
{
	if(u>n)
	    return 1;
	int res=0;
	for(int i=1;i<=n;i++)
	{
		if(i!=u&&!st[i])//不能填自己,并且这个数没有被访问过
		{
		//	patu[u]=i; 
			st[i]=true;
			res+=dfs(u+1,n);//加上递归下一层的结果 
			st[i]=false;
		} 
	}
	return res;
}
int c(int a,int b)
{
	int res=1,i,j;
	for(i=a,j=1;j<=b;i--,j++)
	{
		res=res*i/j;
	}
	return res;
}
void solve()
{
	cin>>n>>k;
	int res=1;//c(n,0)=1 
	for(int i=2;i<=k;i++)//最多有k个索引不满足所以进行累加 
	{
		res+=c(n,i)*dfs(1,i);
	}
	cout<<res<<endl;
}
signed main()
{
    int t=1;
    while(t--)
    {
       solve();
    }
    return 0;
}


 

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

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

相关文章

MySQL数据库之表操作

目录 表的操作1.创建表创建表案例 2.查看表结构3.修改表4.删除表 表的操作 1.创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列…

Python异步编程--获取girlypic写真集

前言 在日常生活中&#xff0c;无论是网络配置、文件整理、web开发还是工具&#xff0c;时常用到Python写些脚本。 这次主要是分享下异步编程的经验&#xff0c;就拿获取girlypic的图片举例吧&#xff0c;也希望能给一些同学带来思考。 使用argparse而不是os.args&#xff0…

pytorch直线拟合

目录 1、数据分析 2、pytorch直线拟合 1、数据分析 直线拟合的前提条件通常包括以下几点&#xff1a; 存在线性关系&#xff1a;这是进行直线拟合的基础&#xff0c;数据点之间应该存在一种线性关系&#xff0c;即数据的分布可以用直线来近似描述。这种线性关系可以是数据点…

86.Linux系统下复制进程fork(逻辑地址和物理地址)

目录 fork复制进程 逻辑地址和物理地址 fork复制进程 fork 是一个系统调用&#xff0c;在 Linux/Unix 系统中用于创建一个新的进程&#xff0c;新进程称为子进程。子进程是父进程的副本&#xff0c;它从父进程那里继承了大部分属性和资源&#xff0c;包括代码、数据、打开的文…

【逗老师的无线电】Debian Linux手工编译安装MMDVM

看我干了啥&#xff0c;在Vmware里面装了一个Debian Linux并且运行了MMDVMHost&#xff0c;来支持业余无线电通联 开始之前先举个手&#xff0c;有多少朋友能分清MMDVM和Pi-Star关系的&#xff1f; MMDVM、Pi-Star和树莓派的关系 咱们先科普一下这个小知识点。各位HAM们应…

Python基础(第五期): python数据容器(序列) 列表 集合 元素 字符串 字典 序列遍历操作

python基础专栏 python基础&#xff08;第五期&#xff09; 文章目录 python基础&#xff08;第五期&#xff09;数据容器一、列表1、列表的定义2、列表的下标索引 3、列表的(添加)方法3.1 列表的查询方法3.2 修改特定下标索引的值3.3 列表指定位置插入元素3.3 列表指定元素的追…

自动驾驶高效预训练--降低落地成本的新思路(AD-PT)

自动驾驶高效预训练--降低落地成本的新思路 1. 之前的方法2. 主要工作——面向自动驾驶的点云预训练2.1. 数据准备 出发点&#xff1a;通过预训练的方式&#xff0c;可以利用大量无标注数据进一步提升3D检测 https://arxiv.org/pdf/2306.00612.pdf 1. 之前的方法 1.基于对比学…

setTimeout和setImmediate以及process.nextTick的区别?

目录 前言 setTimeout 特性和用法 setImmediate 特性和用法 process.nextTick 特性和用法 区别和示例 总结 在Node.js中&#xff0c;setTimeout、setImmediate和process.nextTick是用于调度异步操作的三种不同机制。它们之间的区别在于事件循环中的执行顺序和优先级。…

django安装数据库

使用pip安装django pip3 install django注意我使用的是python3所以用pip3安装&#xff0c;如需安装指定版本 django ..* 检测是否安装成功,不报错&#xff0c;则安装成功 # python3 # import django下边这是报错的 django迁移数据库 再mysql中简历数据库 CREATE DATABA…

COOHOM通过采用亚马逊云科“专库专用”的方式,为云原生的构建提供稳定的数据支撑

全球化浪潮下&#xff0c;面对全球化业务发展带来的新需求与新挑战&#xff0c;越来越多的企业开启了云原生构建旅程&#xff0c;以推动业务系统快速迭代&#xff0c;为国际业务的拓展打下坚实的基础。COOHOM是杭州群核信息技术有限公司旗下的国际化品牌。为全球企业和个人提供…

au怎么把音乐和人声单独分离出来?分享最简单的方法!

把音乐和人声单独分离&#xff0c;对于音频处理和后期制作来说&#xff0c;可以方便地对人声或音乐进行单独的处理和编辑&#xff0c;以达到更好的效果。下面介绍了怎么把利用AU音乐和人声单独分离出来的详细步骤。 一、AU 1、把自己需要处理的那首歌copy到桌面&#xff0c;再…

npm install:sill idealTree buildDeps

执行npm install&#xff0c;卡在 sill idealTree buildDeps PS D:\workspace-groovy\attendance-india-web> npm install -g cnpm --registryhttps://registry.npm.taobao.org [..................] / idealTree:node_global: sill idealTree buildDeps[.................…

BUUCTF 隐藏的钥匙 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 路飞一行人千辛万苦来到了伟大航道的终点&#xff0c;找到了传说中的One piece&#xff0c;但是需要钥匙才能打开One Piece大门&#xff0c;钥匙就隐藏在下面的图片中&#xff0c;聪明的你能帮路飞拿到钥匙&#xff…

视频编辑软件Corel VideoStudio 会声会影2024中文剪辑使用教程

会声会影&#xff08;Corel VideoStudio&#xff09;2024为加拿大Corel公司发布的一款功能丰富的视频编辑软件。会声会影2023简单易用&#xff0c;具有史无前例的强大功能&#xff0c;拖放式标题、转场、覆叠和滤镜&#xff0c;色彩分级、动态分屏视频和新增强的遮罩创建器&…

​软考-高级-信息系统项目管理师教程 第四版【第15章-项目风险管理-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第15章-项目风险管理-思维导图】 课本里章节里所有蓝色字体的思维导图

多线程JUC 第2季 多线程的原子性

一 多线程原子性 1.1 基本数据类型原子 atomicInteger&#xff0c; atomicLong&#xff0c;atomicBoolean 代码 package com.ljf.thread.atomic;import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger;class MyNumber {AtomicInt…

YoloV5训练V3Det数据集实战

摘要 V3Det&#xff1a;一个庞大的词汇视觉检测数据集&#xff0c;在大量真实世界图像上具有精确注释的边界框&#xff0c;其包含13029个类别中的245k个图像&#xff08;比LVIS大10倍&#xff09;&#xff0c;数据集已经开源&#xff01; 图片的数量比COCO多一些&#xff0c;…

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{field1…

哪一波最容易亏钱,昂首资本这样讲

有交易者咨询anzo capital昂首资本&#xff0c;按照波浪理论最容易亏钱是在第几波&#xff0c;通过调查得知80%的错误发生在第四波。所以对哪一波最容易亏钱&#xff0c;很有可能就是第四波。当然了如果能准确的判断第四波时&#xff0c;也可能获得相当丰厚的利润。 第四波通…

8 mysql中的索引2

一、索引的种类 1、 B树索引 1.**每个索引就是一颗B树**&#xff0c;二级索引不包含行记录的全部数据 2.叶子节点除了包含键值以外&#xff0c;每个叶子节点中的索引行中还包含了一个书签( bookmark) 3.B平衡树是一颗查找树&#xff0c;B树的叶子节点用来放数据的,并且所有叶…