2019 Sichuan Province Programming Contest J. Jump on Axis

news2025/2/24 1:04:51

题目链接:https://codeforces.com/gym/102821/problem/J

题意:给你一个坐标k,每次从0开始走

每次有三个选择:选择1走一步,选择2走两步,选择3走三步

每次选第i个选择的时候,如果他没有被选过,那么就走i步

如果他被选过了的话就走上一次选择这个选择走过的步数+3步

问:到k的最小步数和到k有多少种方法

思路:我们把每次选择打表:

 然后我们可以用一个二维数组v【i】【j】来预处理存选项i一共选了j次所走的路程

设选项1走了i次,选项2走了j次,选项3走了k次

我们只用列举一下i和j的路程,然后算出k

如果满足条件更新步数ans=min(ans,i+j+k)

然后对于每个满足的i j k,选择的方案是C(i+j+k,i)*C(j+k,j)

(在i+j+k个位置里选i个位置走选项1,在剩下的j+k个位置走选项2)

然后我们化简一下就是:

因为需要取模,然后我们就要用逆元求一下阶乘的倒数r【i!】数组,还需要求一下阶乘f【i】数组 

由打表可以知道i,j,k不超过2600个,

而且最后是i+j+k,那么我们就开3*3000个数组

具体代码如下:

#include<bits/stdc++.h>
using namespace std;
#define int long long 
typedef long long ll;
int n,ans,con;
const int N=3*3000,mod=1e9+7;
int f[N],r[N];
vector<int> v[5];
int ksm(int a,int b,int p){
	int res=1%p;
	while(b){
		if(b&1)res=res*a%p;
		a=a*a%p;
		b>>=1;
	}
	return res;
}
void init(){
	for(int i=1;i<=3;i++){//预处理选项i选了j次走的路程
		v[i].push_back(0);//当选0次的时候走了0
		for(int j=1;;j++){
			int op=v[i][j-1]+(j-1)*3+i;
			if(op>1e7)break;//当大于1e7的时候剪枝
			v[i].push_back(op); 
		} 
		v[i].push_back(1e9); //最后加上个大整数是方便lower_bound查找
	}
	f[0]=r[0]=1;
	for(int i=1;i<N;i++){//处理阶乘
		f[i]=f[i-1]*i%mod;
	}
	for(int i=1;i<N;i++){//处理阶乘的逆元
		r[i]=ksm(f[i],mod-2,mod);
	}
}
signed main(){
	init();
	int t;
	scanf("%lld",&t);
	for(int p=1;p<=t;p++){
		ans=1e9;
		cin>>n;
		con=0;
		for(int i=0;v[1][i]<=n;i++){//列举选项1
			for(int j=0;v[1][i]+v[2][j]<=n;j++){//列举选项2
				int x=n-v[1][i]-v[2][j];//算选项3
				int k=lower_bound(v[3].begin() ,v[3].end() ,x )-v[3].begin() ;
				if(v[3][k]==x){//如果满足
					ans=min(ans,i+j+k);
					con=(con+f[i+j+k]*r[i]%mod*r[j]%mod*r[k]%mod)%mod;
				}
			}
		}
		printf("Case %lld: %lld %lld\n",p,ans,con);
	}
	return 0;
}

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

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

相关文章

MySQL是如何保证数据不丢失的

一.什么是两阶段提交 1.SQL语句&#xff08;update user set name‘李四’ where id3&#xff09;的执行流程是怎样的呢&#xff1f; 1.执行器先找引擎取 ID3这一行。ID 是主键&#xff0c;引擎直接用树搜索找到这一行。 2.如果 ID3 这一行所在的数据页本来就在内存中&#x…

力扣算法入门刷题

1、回文数 判断输入的整数是否是回文 我的一般思路&#xff1a; 将输入的整数转成字符串&#xff0c;再将这个字符串转成字符数组c&#xff0c;对字符数组进行遍历&#xff0c;如果第i个元素与第 c.length - i - 1 元素不相等&#xff0c;也就是通过比较首尾元素是否相同来判断…

自动化早已不是那个自动化了,谈一谈自动化测试现状和自我感受……

前言 从2017年6月开始接触自动化至今&#xff0c;已经有好几年了&#xff0c;从17年接触UI自动化&#xff08;unittestselenium&#xff09;到18年接触接口自动化&#xff08;unittestrequests&#xff09;再到18年自己编写自动化平台&#xff08;后台使用python的flask&#…

风、光、柴油机、蓄电池、电网交互微电网经济调度优化问题研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

爆破校园网的宽带

前提&#xff1a;学校的手机号前7位相同&#xff0c;宽带密码都是手机号后六位。仅供学习。 准备工作&#xff1a;电脑一台&#xff0c;把校园网的宽带水晶头插在电脑上&#xff0c; 步骤&#xff1a; winR输入Rasphone点击新建&#xff0c;宽带&#xff0c;输入宽带名称&am…

Vue复刻华为官网 (一)

1 分析 根据华为网页的布局&#xff0c;我们大体上可以将其划分为7个盒子&#xff0c;如下&#xff0c;由于写一个这样的网页再加上部分动态效果&#xff0c;需要的时间很长&#xff0c;本篇博客只记录了div1、div2、div3的静态效果轮播图的实现。 2 顶部盒子的实现 想要实现的…

【C++AVL树】4种旋转详讲

目录 引子&#xff1a;AVL树是因为什么出现的&#xff1f; 1.AVl树的的特性 2.AVl树的框架 3.AVL树的插入 3.1四种旋转&#xff08;左单旋、右单旋、左右双旋、右左双旋&#xff09; 3.1.1左单旋 3.1.2右单旋 3.1.3左右双旋 3.1.4右左双旋 总结 引子&#xff1a;AVL树是因…

【单片机】单片机的核心思想

&#x1f4ac;推荐一款模拟面试、刷题神器 、从基础到大厂面试题&#xff1a;&#x1f449;点击跳转刷题网站进行注册学习 目录 一、单片机的核心思想 二、单片机核心图 三、上拉电路及应用 排阻的优势 四、单片机的输入输出模式 1、接收外部电压信号 2、向外输出电压信…

0089 时间复杂度,冒泡排序

/* * 排序也称排序算法&#xff08;Sort Algorithm&#xff09; * 排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 * * 排序分类 * 1.内部排序&#xff1a;将需要处理的所有数据都加载到内存存储器中进行排序&#xff08;使用内存&#xff09; * 插…

彻底搞懂WeakMap和Map

一 、Map Map是一种叫做字典的数据结构&#xff0c;Map 对象保存不重复键值对&#xff0c;并且能够记住键的原始插入顺序 Map的属性和方法* 属性&#xff1a; size&#xff1a; 返回所包含的键值对长度* 操作方法&#xff1a;* set(key,val): 添加新键值对* get(key): 通过传…

Linux--信号signal、父子进程、SIGCHLD信号相关命令

目录 1.概念&#xff1a; 2.信号的存储位置&#xff1a; 3.常见的信号的值以及对应的功能说明&#xff1a; 4.信号的值在系统源码中的定义&#xff1a; 5.响应方式&#xff1a; 6.改变信号的相应方式&#xff1a; (1)设置信号的响应方式: (2)默认:SIG_DFL;忽略:SIG_IGN…

Android Studio 新版本 Logcat 的使用

前言 最近&#xff0c;Android Studio 自动更新了自带的 Logcat 工具&#xff0c;整体外观和使用方法变得和之前完全不同了。一开始我以为是自己按到什么不该按的按钮&#xff0c;把 Logcat 弄坏了&#xff0c;后来才知道是版本更新导致的。新版本的 Logcat 用命令来过滤信息&…

jmeter变量函数以及抓包用法

抓包 代理服务器&#xff1a; 自己启动一个代理服务器 本地&#xff0c;要使用代理服务器的ip和端口&#xff0c;使用自己启动的代理服务器 操作步骤 添加线程组测试计划 > 非测试元件 > http代理服务器一定要修改 修改为** 测试计划>线程 ip就是你自己电脑的ip&…

Activity

Activity生命周期图 官网的 Activity 的生命周期图&#xff1a; 在官方文档中给出了说明&#xff0c;不允许在 onPause() 方法中执行耗时操作&#xff0c;因为这会影响到新 Activity 的启动。 常见情况下Activity生命周期的回调 &#xff08;A 与 B 表示不同的 Activity &a…

(硬件设计)老工程师的经验之道

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录前言1、用蜡烛油固定电位器2、电路板接插件用彩色接插件前言 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时…

Python----科学计数法、同时给多个变量赋值、eval函数、math库函数、复数(complex())、内置的数值运算函数、内置的数值运算操作符

科学计数法使用字母"e"或者“E”作为幂的符号&#xff0c;以10为基数&#xff0c;科学计数法的含义如下&#xff1a; 96e4&#xff1a;96乘10的4次幂 4.3e-3&#xff1a;4.3乘10的负三次幂 aeb&#xff1a;a*10*b 同时给多个变量赋值格式: 变量1&#xff0c;变量2表…

基于Python的电影推荐系统

电影推荐系统 目录 电影推荐系统 1 数据描述 1变量说明 1程序介绍 2 本次课程作业在 small-movielens 数据集的基础上&#xff0c;对用户、电影、评分数据进行了处理&#xff0c;然后根据 Pearson 相关系数计算出用户与其他用户之间的相似度&#xff0c;根据相似度进行推荐和…

用Python来表白,把情书写进她的照片里

前言 这不已经十一月了&#xff0c;22年马上就过完了&#xff0c;各位兄弟有对象了吗&#xff0c;现在就是缺钱还缺对象 退一步来说&#xff0c;有心仪的人吗啊&#xff0c;如果有的话&#xff0c;看看这篇 程序员的表白小妙招吧 实现步骤 想要实现把情书写在像素中&#xf…

【Web-HTML基础】颜色赋值、背景图片、文本和字体相关样式、元素的显示方式display、盒子模型、部分标签自带外边距或内边距

目录 颜色赋值 背景图片 文本和字体相关样式 元素的显示方式display 盒子模型 盒子模型之content内容 盒子模型之margin外边距 盒子模型之border边框 盒子模型之padding内边距 部分标签自带外边距或内边距 综合代码实现 颜色赋值 三原色: 红绿蓝 RGB RedGreenBlue …

【2022秋招面经】——深度学习

文章目录请写出常用的损失函数&#xff0c;平方损失、交叉熵损失、softmax损失函数和hinge1. 0-1 损失函数2. 绝对值损失函数3. 平方损失函数4. log 对数损失函数5. 指数损失函数&#xff08;exponential loss&#xff09;6. Hinge 损失函数7. 感知损失(preceptron loss)函数8.…