ABC300

ABC300E

题面

思路

对于投骰子,最后一步可能得到1、2、3、4、5、6,那么对应的最后一步之前的数是n/1、n/2、n/3、n/4、n/5,n/6。并且每个数字(1、2、3、4、5、6)得到的概率是一样的,即为1/6。

也就是F(n)=(1/6)(F(n/1)+F(n/2)+F(n/3)+F(n/4)+F(n/5)+F(n/6))*{只有n%4==0,F(n/4)才能产生贡献,其余同理}

移项得:F(n)=1/5(F(n/1)+F(n/2)+F(n/3)+F(n/4)+F(n/5)),如果一位数组能开下,就可以直接线性dp进行状态转移,但是这个n<=1e18,所以用记忆化搜索的方式实现dp,记录mp[x]为得到x的概率,由于在取模过程中进行了/5操作,所以求一下5在 mod 99824435意义下的乘法逆元即可

细节:mp[x]在调用之前如果不存在会创建mp[x]=0,对记忆化搜索的过程有影响,所以记忆化x是否保存结果的时候应该使用mp.count(x)

代码;

ABC300F

题面

#include <bits/stdc++.h>
using namespace std;

#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define PII pair<int, int>
#define de(a) cout << #a << " = " << a << "\n";
#define deg(a) cout << #a << " = " << a << " ";
#define endl "\n"
#define int long long
#define LL long long
const int mod = 998244353;
const int N = 1e6 + 5;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};

int POW(int a, int b)
{
	int res = 1;
	while (b)
	{
		if (b & 1)
			res *= a;
		a *= a;
		res %= mod;
		a %= mod;
		b >>= 1;
	}
	res %= mod;
	return res;
}
map<int, int> mp;

int dp(int n, int inv)
{
	if (mp.count(n))
		return mp[n];

	int ans = 0;
	for (int i = 2; i <= 6; i++)
	{
		if (n % i == 0)
		{
			ans += dp(n / i, inv);
			ans % +mod;
		}
	}
	mp[n] = ans * inv % mod;
	return mp[n];
}

void solve()
{
	int inv = POW(5, mod - 2);
	int n;
	cin >> n;
	mp[1] = 1;
	cout << dp(n, inv);
}

signed main()
{
	FAST;
	int t = 1;
	// cin >> t;
	while (t--)
		solve();

	return 0;
}

思路

先抛出结论:起点一定在1-N某个点(假设字符串第一个字符的下标为1)

证明:首先T是由M个S串拼接而成,假设最优方案具有从第N+1或者更晚的某个字符开始的最长连续的o,然后对于第i个字符,我们决定使用第i-N个字符去替代它(他们是相同的,在不考虑修改的情况下,而且这种情况必定存在,因为i>=N+1)。

得到这个结论之后,就可以O(N)枚举起点,那怎么得到终点呢?

??暴力枚举,从i(1<=i<=N)开始,枚举j(N<=j<=NM)直到i-j这个区间内的x的个数大于k停止,此时答案即为j-i+1 (i-j范围内的x最多出现k次)。思路没错,但是这样跑直接T飞。

写到这一步就可以二分了,sum[i]表示从1-i这个区间内x的个数是多少。只需要求出1-N的即可,因为后面的NM-N个字符,每N个都与前1-N个字符相同,那对于一个大于N的下标i可以这样得到1-i中的x的个数

int f(int x, int n, vector<int> &rw) // 返回从1-x有多少个x
{//x为终点下表,n即为上文的N,也就是S串的长度,rw是前缀和数组,rw[i]代表1-i有多少个x
	int res = (x / n) * rw[n];
	int rem = x % n;
	res += rw[rem];
	return res;
}

总结:

枚举起点i(1<=i<=N),二分终点j(i<=j<=NM),[i,j]这个闭区间中x的个数<=k

代码:

#include <bits/stdc++.h>
using namespace std;

#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define PII pair<int, int>
#define de(a) cout << #a << " = " << a << "\n";
#define deg(a) cout << #a << " = " << a << " ";
#define endl "\n"
#define int long long
#define LL long long
const int mod = 1e9 + 7;
const int N = 1e6 + 5;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};

int f(int x, int n, vector<int> &rw) // 返回从1-x有多少个x
{
	int res = (x / n) * rw[n];
	int rem = x % n;
	res += rw[rem];
	return res;
}

void solve()
{
	int n, m, k;
	cin >> n >> m >> k;
	string s;
	cin >> s;
	vector<int> rw(n + 1, 0);
	for (int i = 0; i < n; i++)
	{
		rw[i + 1] = rw[i];
		if (s[i] == 'x')
			rw[i + 1]++;
	}

	int res = 0;
	for (int i = 1; i <= n; i++)
	{
		int fbeg = f(i - 1, n, rw); // 1-i-1位置有多少x
		int l = i, r = n * m;
		while (l <= r)
		{
			int mid = l + r >> 1;
			if (f(mid, n, rw) - fbeg <= k)
			{
				// f(mid, n, rw) - fbeg从i-mid有多少x
				l = mid + 1;
			}
			else
			{
				r = mid - 1;
			}
		}
		res = max(r - i + 1, res);
	}
	cout << res << endl;
}

signed main()
{
	FAST;
	int t = 1;
	// cin >> t;
	while (t--)
		solve();

	return 0;
}

ABC300G

参考:AtCoder Beginner Contest 300——A-G题讲解atcoder比赛阿史大杯茶的博客-CSDN博客

官方题解:Editorial - UNIQUE VISION Programming Contest 2023 Spring(AtCoder Beginner Contest 300)

#include <bits/stdc++.h>
using namespace std;

#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define PII pair<int, int>
#define de(a) cout << #a << " = " << a << "\n";
#define deg(a) cout << #a << " = " << a << " ";
#define endl "\n"
#define int long long
#define LL long long
const int mod = 1e9 + 7;
const int N = 1e6 + 5;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};

int n, p;

void push(vector<int> &a, int num) // 将与num结合合法的数全部加进来
{
	int sz = a.size();
	for (int i = 0; i < sz; i++)
	{
		int t = a[i];
		while (1)
		{
			t *= num;
			if (t > n)
				break;
			a.push_back(t);
		}
	}
}

void solve()
{
	vector<int> prime = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};

	cin >> n >> p;

	while (p < prime.back()) // 将大于p的质因数删去
		prime.pop_back();

	vector<int> frt = {1}, bck = {1};
	for (auto &c : prime)
	{
		if (frt.size() < bck.size())
			push(frt, c); // 采用这种方式降低push函数里面的时间复杂度
		else
			push(bck, c);
	}

	sort(frt.begin(), frt.end());
	sort(bck.begin(), bck.end());
	int res = 0;
	for (int i = 0, j = bck.size() - 1; i < frt.size(); i++) // 双指针找合法数
	{
		int left = n / frt[i];
		while (j >= 0 && left < bck[j])
			j--;
		if (j < 0)
			break;
		res += j + 1;
	}
	cout << res << endl;
}

signed main()
{
	FAST;
	int t = 1;
	// cin >> t;
	while (t--)
		solve();

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CC++内存管理

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb;c内存管理方式new/delete 操作内置类型new和delete操…

redis的持久化

第一章、redis的持久化 1.1&#xff09;持久化概述 ①持久化可以理解为将数据存储到一个不会丢失的地方&#xff0c;Redis 的数据存储在内存中&#xff0c;电脑关闭数据就会丢失&#xff0c;所以放在内存中的数据不是持久化的&#xff0c;而放在磁盘就算是一种持久化。 ②为…

misc学习(1)Bugku-社工-进阶收集

新手一枚&#xff0c;参考文献如下&#xff1a; Bugku&#xff1a;社工-进阶收集_bugku 社工 进阶收集_FW_ENJOEY的博客-CSDN博客 照片如图所示&#xff1a; 线索线&#xff1a; 1.百度识图 发现是大雁塔 2.主角家距离大雁塔一共有七站地铁&#xff0c;其中要进行中转。 同时…

剑指Offer68-I.二叉搜索树的最近公共祖先 C++

1、题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也…

uni——月份选择(横向滑动tab,横向滚动选择日期)

案例展示 案例代码 已封装成组件使用 <template><view><view class"tabBox"><scroll-view scroll-x"true" :scroll-left"scrollLeft" :scroll-with-animation"true"><view class"box"><…

STM32--EXTI外部中断

前文回顾---STM32--GPIO 相关回顾--有关中断系统简介 目录 STM32中断 NVIC EXTI外部中断 AFIO EXTI框图 旋转编码器简介 对射式红外传感器工程 代码&#xff1a; 旋转编码器工程 代码&#xff1a; STM32中断 先说一下基本原理&#xff1a; 1.中断请求发生&#xff1a…

Zabbix自动注册服务器及部署代理服务器

文章目录 一.zabbix自动注册1.什么是自动注册2.环境准备3.zabbix客户端配置4.在 Web 页面配置自动注册5.验证自动注册 二.部署 zabbix 代理服务器1.分布式监控的作用&#xff1a;2.环境部署3.代理服务器配置4.客户端配置5.web页面配置5.1 删除原来配置5.2 添加代理5.3 创建主机…

周末在家值班,解决几个月前遗忘的Bug

问题&#xff1a; 周末被迫在家值班&#xff0c;无聊之际打开尘封已久的Bug清单&#xff0c;发现有Bug拖了几个月还没解决… 场景是这样子的&#xff0c;有个功能是拿Redis缓存热点数据进行展示&#xff0c;暂且称它为功能A&#xff0c;有个另外的功能B&#xff0c;它会去更新缓…

day3 STM32 GPIO口介绍

GPIO接口简介 通用输入输出接口GPIO是嵌入式系统、单片机开发过程最常用的接口&#xff0c;用户可以通过编程灵活的对接口进行控制&#xff0c;实现对电路板上LED、数码管、按键等常用设备控制驱动&#xff0c;也可以作为串口的数据收发管脚&#xff0c;或AD的接口等复用功能使…

家政服务平台|家政上门服务系统打开时代新渠道

在快节奏的现代社会&#xff0c;工作和家庭的双重压力常常使人们备受折磨。为了缓解这种压力&#xff0c;我们公司推出了一款创新的家政上门服务系统&#xff0c;旨在为您提供便捷、高效的生活服务。通过结合先进技术和人性化服务&#xff0c;我们致力于改善您的生活品质&#…

JPA实现存储实体类型信息

本文已收录于专栏 《Java》 目录 背景介绍概念说明DiscriminatorValue 注解&#xff1a;DiscriminatorColumn 注解&#xff1a;Inheritance(strategy InheritanceType.SINGLE_TABLE) 注解&#xff1a; 实现方式父类子类执行效果 总结提升 背景介绍 在我们项目开发的过程中经常…

CMake:检测python模块和包

CMake:检测python模块和包 导言项目结构CMakeLists.txt相关源码 导言 上一篇&#xff0c;我们基本了解了如何去检测python的解释器和python库。通常&#xff0c;代码是依赖于特定的python模块&#xff0c;无论是python工具、嵌入python的程序&#xff0c;还是扩展python的库。…

法律监督大数据平台有什么作用?

大数据赋能时代法律监督&#xff0c;构建法律行业领域大数据监督模型。法律监督大数据研判系统助力检察机关以社会公正为核心价值追求&#xff0c;对执法不严、司法不公“零容忍”&#xff0c;强化对诉讼活动的法律监督&#xff0c;坚决维护法律尊严&#xff0c;坚决捍卫公平正…

创建Springboot+vue3项目

项目概述创建springboot项目加入mybatis-plus支持1.加入依赖代码2.创建数据库实例3.yml文件的配置4.编写测试代码5.测试结果 创建vue项目报错错误一错误二错误三 项目概述 后端&#xff1a;Springboot、mybatis-plus、java 前端&#xff1a;nodejs、vue脚手架、element-ui 数据…

研发工程师玩转Kubernetes——PVC使用Label和storage选择PV

在《研发工程师玩转Kubernetes——local型PV和PVC绑定过程中的状态变化》和《研发工程师玩转Kubernetes——使用local型PV在不同Pod上共享数据》中&#xff0c;我们介绍了指定VPC的spec.volumeName为PV名称来绑定它们的方法。本文将介绍PVC在创建时&#xff0c;系统自动选择绑定…

GEE学习04-

0 回顾 之前学习的内容可以概括为&#xff1a; conda activate gee cd /d e:/geelearn jupyter lab可以在prompt中chrlc停止当前打开的jupyter lab. import ee #ee.Authenticate() import geemap geemap.set_proxy(port 1080) map geemap.Map() map1、视频课学习 之后跟着…

SonarQube安装与Java、PHP代码质量分析扫描

文章目录 1、下载安装1.1、SonarQube下载1.2、SonarQube安装1.3、SonarQube中文汉化1.4、SonarScanner扫描器 2、扫描项目2.1、java代码扫描2.2、php代码扫描 1、下载安装 SonarQube负责存储代码数据、收集数据、分析代码和生成报告等。 1.1、SonarQube下载 下载地址&#x…

【TypeScript】类型断言-类型的声明和转换(五)

【TypeScript】类型断言-类型的声明和转换&#xff08;五&#xff09; 【TypeScript】类型断言-类型的声明和转换&#xff08;五&#xff09;一、简介二、断言形式2.1 尖括号语法2.2 as形式 三、断言类型3.1 非空断言3.2 肯定断言-肯定化保证赋值3.3 将任何类型断言为any3.4 调…

ngrok内网穿透可以实现资源共享吗?快解析更加简洁

随着互联网的高速发展&#xff0c;越来越多的人开始意识到内网穿透技术的重要性。在这一技术中&#xff0c;ngrok已经成为了一个备受关注的工具。然而&#xff0c;很多人对于ngrok是否可以进行资源共享存在疑问。本文将从新的角度出发&#xff0c;深入探讨这个问题。 了解什么…

要实现智能制造到底有多难?先看看这一步...

是新朋友吗&#xff1f;记得先点上方蓝字关注Ruff 智能制造、数字化转型&#xff0c;已成为当下制造业最炙手可热的话题&#xff0c;政府工作报告中已多次提到&#xff0c;为了促进数字经济发展&#xff0c;加强数字中国建设整体布局&#xff0c;打造智能工厂、智慧工厂。愿景是…