分割范围Codeforces Round #181 (Div. 2)

本文探讨了在解决数学和编程问题时的策略选择与复杂度优化,包括使用动态规划解决几何分割问题、质因数分解技巧以及通过优化数据结构减少计算量。同时,提供了求解特定数学条件下的最小值问题的算法实现,并分享了程序员职业发展的幽默故事。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每日一贴,今天的内容关键字为分割范围

    标题链接

    A ,B虽然是水题,但要是没想清晰就易容掉进某个坑里。。

    C:预处理出有所可能的和,然后个每个每和分给a b两个数

    D:竞赛的时候标题没看懂,题意就是说在一个n*n的正方形格网中分割k次有几种分法,每次分完后剩下的四个子矩形必须为正方形。斟酌到最后可以分割log级别的次数,而且每分割一次,又现出了四个空白的子正方形,天然以可就想到dp,很明显的子结构啊。我们不妨从小到大结构,每多一层,正方形的巨细就扩展两倍,dp[i][j]示表前i层,经已画了k次的总案方数,那么转移的时候我们只需要枚举以后层的四个角落各自画了多少次,然后酿成一个两倍巨细的正放形(多画一步)。天然不能四重循环去枚举,间中要套一个的d【】组数来多进行一次小DP,算是DP套着DP吧。

    E:求满意p!%(a1!*a2!*a3!*...*ak!)=0;的最小的p。k的范围是100w,a[i]的范围是1000w.

    没什么难想的,就是考你有没有把握什么速快解分质因子的法方。。。。

    学了一种欧拉法筛,,可以在线性时间内筛选出素数,还可以失掉个每数的最小质因子lp[i]。

    http://wenku.baidu.com/view/542961fdba0d4a7302763ad5.html

    O(n)明证的关键是个每数只会被筛一次

    然后接下来的问题就是怎么利用lp[i]来解分这100w个数,其实这一步的算计量跟数的个数关无,跟数的巨细有关。

    我们可以用一个组数cnt[i]示表i这个素数现出的次数,那么接下来这段代码就是精华了。

for(int i = 0; i < n; i++) scanf("%d",&a[i]),cnt[a[i]]++,sum+=a[i];
	for(int i = M - 10; i >= 2; i--) cnt[i] += cnt[i+1];
	for(int i = M - 10; i >= 2; i--)
	{
		if(lp[i]!=i) cnt[lp[i]] += cnt[i];
		cnt[i/lp[i]] += cnt[i];
	}

    自己研讨研讨还是挺乐快的。。。。。

    

    每日一道理
漫漫人生路,谁都难免会遭遇各种失意或厄运。在凄风苦雨 惨雾愁云的考验面前,一个强者,是不会向命运低头的。风再冷,不会永远不息;雾再浓,不会经久不散。风息雾散,仍是阳光灿烂。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lld;
const int maxn = 1000010;
const int M   =  10000010;
int a[maxn];
int prime[M];
int lp[M]; 
lld cnt[M];
int tot;
void init() // precalc in O(n) and get lp[i](the minimum prime factor of i)
{
	for(int i = 2; i <= M-10; i++)
	{
		if(!lp[i]){
			lp[i] = i;
			prime[tot++] = i;
		}
		for(int j = 0; j < tot && i*prime[j]<=10000000; j++) {
			lp[i*prime[j]] = prime[j];
			if(i%prime[j]==0) break;
		}
	}
}
bool check(lld mid)
{
	for(int i = 0;i < tot; i++)
	{
		lld tmp = mid,sum=0;
		while(tmp) {
			tmp /= prime[i];
			sum += tmp;
		}
		if(sum < cnt[prime[i]]) return false; 
	}
	return true;
}
int main()
{
	init();
	int n;
	scanf("%d",&n);
	lld sum = 0;
	for(int i = 0; i < n; i++) scanf("%d",&a[i]),cnt[a[i]]++,sum+=a[i];
	for(int i = M - 10; i >= 2; i--) cnt[i] += cnt[i+1];
	for(int i = M - 10; i >= 2; i--)
	{
		if(lp[i]!=i) cnt[lp[i]] += cnt[i];
		cnt[i/lp[i]] += cnt[i];
	}
	lld l = 1 , r = sum , best = -1;
	while(l <= r) {
		lld mid = l + r >> 1;
		if(check(mid)) {
			best = mid;
			r = mid - 1;
		} else {
			l = mid + 1;
		}
	}
	printf("%I64d\n",best);
	return 0;
}

文章结束给大家分享下程序员的一些笑话语录: 一个程序员对自己的未来很迷茫,于是去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的"
于是他去问Lippman。
Lippman说"程序员的未来就是驾驭程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的"
于是他去问Gates。
Gates说"程序员的未来就是榨取程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的"
于是他去问侯捷。
侯捷说"程序员的未来就是诱惑程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝摇摇头"唉,我的孩子,你还是别当程序员了")

内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常检测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资料,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资料,深入研究相关理论和技术背景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值