关于北航程设考试题目的一点研究

image

评价

没想到北航程设题竟然这么有实力,难怪会作弊

一种可能是对的做法

不难想到一个贪心,每次都作弊,直到不能作弊时,就停止作弊
然后接下来想到直接二分作弊次数,然后剩下的时间都不作弊,判断就看最终警觉值会不会\(<L\)
仔细一想,因为警觉值应该不能为负数,所以有可能不作弊时减去\(y\)时,\(y\)不能完全减去
这样前面的做法就有问题
再思考,每次减到\(0\)后,接下来就会不断地循环这个过程,我们可以找到循环的长度,多余的部分就可以直接套用前面的做法
剩下的问题就转化成了\(tx\%y\ge L-x\),求最小的\(t\),若\(tx\%y+x\ge L\),这时候必须额外减去一个y来清零,如果不存在这样的\(t\),就可以直接套用前面的做法
\(p=L-x,x=x\%y,t'=\lfloor\frac{p}{x}\rfloor\)

  • \(t'x\ge p\),则\(t'\)为最小的\(t\)
  • \((t'+1)x\%y\ge p\),则\(t'+1\)为最小的\(t\)
  • 否则\((t'+1)x\%y=(t'+1)x-y<p\)

\(dx=(t'+1)x-y\),显然有\(dx<x,y-p<x\)

  • \(dx=0\),则\(t\)不存在
  • \(dx\not=0\),那么可以考虑每次在\(t'x\)的基础上每次\(t'x+(t'+1)x\%y\),相当于每次\(+dx\),如果\(+dx\)超过了\(y\),就再加一次\(t'x\),这样问题就转化成了求\(t\cdot dx\%(y-t_1x)\ge p-t_1x\),最小的\(t\)的问题,递归求解即可,因为\(y-t_1x=y\%x\),所以时间复杂度是\(O(\log n)\)的,证明参考辗转相除法

代码实现

只实现了求\(tx\%y\ge p\),最小值\(t\)的函数,随便拍了一些小数据,应该问题不大

点击查看代码
#include<cstdio>
using namespace std;
int get(int x,int y,int p)
{for(int t=1;t<=y;t++){int res=t*x%y;if(res>=p)return t;}return 0;
}
int dfs(int x,int y,int p)
{if(p>=y) return 0;x%=y;if(x==0) return 0;int t=p/x;if(t*x>=p) return t;if(t*x+x<y) return t+1;int dx=t*x+x-y;if(dx==0) return 0;
//	printf("xyp %d %d %d %d\n",dx,y-t*x,p-t*x,get(dx,y-t*x,p-t*x));int rest=dfs(dx,y-t*x,p-t*x);
//	int rest=get(dx,y-t*x,p-t*x);if(rest==0) return 0;return t+rest*(t+1)+(dx*rest/(y-t*x))*t;
}
int main()
{
//	printf("%d\n",17*30%99);for(int i=13;i<=13;i++){for(int j=i+1;j<=500;j++)for(int k=1;k<=500;k++){
//				if(get(i,j,k)!=0)
//				{if(get(i,j,k)!=dfs(i,j,k))printf("ijk %d %d %d get %d dfs %d\n",i,j,k,get(i,j,k),dfs(i,j,k));	
//				}}}return 0;//30 99 96 get 23 dfs 17
//	printf("%d %d\n",30*23%99,30*29%99);
//	return 0;int x=30,y=99,p=96;printf("%d %d\n",get(x,y,p),dfs(x,y,p));return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费云服务器推荐——阿贝云

阿贝云的免费虚拟主机和免费云服务器为我提供了稳定的性能和简便的操作体验,适合个人和小型网站使用。虽然免费资源有限,但其服务质量和性能让我非常满意。强烈推荐给有需求的朋友!访问阿贝云官网申请吧!

golang接收alertmanager的告警并发送钉钉

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.配置钉钉 1.钉钉自定义机器人接入参考文档参考链接:https://open.dingtalk.com/document/orgapp/custom-robot-access2.配置钉钉机器人如上图所示,注册钉钉拉群聊,然后添加“自定义机器人”,并配置自定…

python第八章课后习题

8.4 求微分方程组的数值解 x=-x3-y,x(0)=1,y=x-y3,y(0)=0.5,0<=t<=30,要求画出x(t)和y(t)的解曲线图形,再相平面上画出轨线点击查看代码 import matplotlib.pyplot as plt from scipy.integrate import solve_ivpdef system(t, state):x, y = statedxdt = -x**3 - …

手动安装ROS2

手动安装ROS2本文以ROS2-jazzy作为示例版本,默认已经安装好ubuntu24.04设置区域 确保你的语言环境支持UTF-8。只要系统是UTF-8语言环境,基本没有问题,可以不设置。 sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-loc…

第七章

7.1 在区间[0,10]上等间距取1000个点Xi(i为下标,i=1,2,3,...,1000),并计算在这些点Xi处函数g(x)=((3x2+4x+6)sinx)/(x2+8x+6)的函数值yi(i为下标),利用观测点(Xi,Yi)(i=1,2,3,...,1000),求三次样条插值函数h(x),并求积分g(x)从0到10和h(x)从0到10。点击查看代码 impor…

识海社区打卡-4

今天打卡大模拟 Problem - 1365D - Codeforces大模拟确实恶心人,但作为最臭的屎平时还是得多吃点,大模拟的特点是思路不算很难但代码真的很长很长,一个不小心哪里写得有问题查错就是半天,各种细节都要很注意,对于提升自己查错能力和快速写题能力还是很有帮助的,这种屎虽然…

《Django 5 By Example》阅读笔记:p54-p75

《Django 5 By Example》学习第3天,p54-p75总结,总计22页。 一、技术总结 1.分页 (1)分页:Paginator (2)页数不存在处理: EmptyPage, PageNotAnInteger 2.class-based views(类视图) (1)为什么使用类视图? 1)Organize code related to HTTP methods, such as GET, POST, o…

11.18

实验17:解释器模式(选作) 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解解释器模式的动机,掌握该模式的结构; 2、能够利用解释器模式解决实际问题。[实验任务一]:解释器模式 某机器人控制程序包含一些简单的英文指令,其文法规则如下: expression…

项目冲刺11.13

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 作业要求这个作业的目标 进行为期七天的项目冲刺并记录前言 本篇博客是项目冲刺的第五篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客第七篇博客团队简介队名 拖延是你不…

Z-Library电子图书馆官方地址入口 国内最新可用镜像网址入口 客户端(持续更新)

Z-Library:自由获取知识的电子图书馆Z-Library(简称Z-Lib)。曾用名BookFinder。是一个提供广泛学术资源的影子图书馆网站。用户可以在此下载期刊、文章以及各类书籍。 其藏书量超过1000万本书籍和8000万篇文章。尽管因版权问题。Z-Library在2022年11月3日遭到封S。但它通过新…

智能驱动下的客户运营与知识管理整合策略

在数字化转型的浪潮中,智能技术的应用正深刻改变着企业的运营模式和客户服务方式。智能驱动下的客户运营与知识管理整合策略,旨在通过智能化手段,优化客户体验,提升运营效率,同时实现知识的有效管理和利用。本文将深入探讨这一策略的核心价值、实施路径及实践案例,为企业…

黑神话吉吉国王版搞笑版总共4关(附下载链接)

话不多说,上图吉吉国王版黑神话点击下载