当前位置: 首页 > news >正文

来追梦-D1295 小F过河

前言

依旧是固定的前言。
拿下了第四名,和第三名同分结果提交次数多了。
发现第三名是我的同学并且比我弱之后大胆猜测他使用的奇怪的方法。
结果看了他T3的代码,的确如此,他居然转移的时候只转移前面和后面的 \(500\) 个,然后数据太水过了。
显然是在模仿CCF,数据也太好了(确信。

话不多说,我的得分情况:90+100+20+0=210,第一题没有做出来挺离谱的,所以我写T2题解
接下来开始我们的正题

题目意思

你现在有两种操作,一种是将你现在手持的数字加上 \(x_1\) 耗费 \(c_1\) 的价值,另一种是将手持的乘上 \(x_2\) 耗费 \(c_2\) 的价值,要你从 \(1\) 变到 \(N\) 的最小价值,如果不行就报告不可能。

题目思考

这是我在草稿纸上面的思路:
首先我们可以将多次的加合并为 \(+ tx_1\),多次的乘合并为 \(\times x_2^t\)
我尝试证明操作序列为 \(+ \times +\) 或者 \(\times + \times\),但是发现不能证明,所以这说明他可能进行了若干次 \(+ \times\) 的操作,所以不妨设我们依次进行了 \(n_1\)\(+\) 操作,\(m_1\)\(\times\) 操作,\(n_2\)\(+\) 操作,\(m_2\)\(\times\) 操作,以此类推。
此时我们考虑他的最终数字,经过 \(n_1\)\(+\) 操作后变为 \(1+n_1x_1\),经过 \(m_1\) 次操作后变为 \((1+n_1x_1)x_2^{m_1}\),经过 \(n_2\)\(+\) 操作,\(m_2\)\(\times\) 后变为

\[((1+n_1x_1)x_2^{m_1}+n_2x_1)x_2^{m_2} \]

\[=x_2^{m_1+m_2}+n_1x_1x_2^{m_1+m_2}+n_2x_1x_2^{m_2} \]

\[=x_2^{m_1+m_2}+x_1(n_1x_2^{m_1+m_2}+n_2x_2^{m_2}) \]

\[=x_2^t+x_1(n_1x_2^{t-1}+n_2x_2^{t-2}+\cdots) \]

接下来式子就化的差不多了,我们去看经过这些操作时候他的代价是多少,经过 \(n_1\)\(+\) 操作,\(m_1\)\(\times\) 操作后,代价是 \(n_1c_1+m_1c_2\),现在还看不出什么,但经过 \(n_2\)\(+\) 操作,\(m_2\)\(\times\) 后,代价变为 \(n_1c_1+m_1c_2+n_2c_1+m_2c_2=(n_1+n_2)c_1+(m_1+m_2)c_2\) 然后观察 \(c_1\) 前面的系数,发现 \((n_1+n_2)\) 就是最后变成的数字里面,含有 \(x_1\) 的项前面的系数!观察 \(c_2\) 的系数,发现 \((m_1+m_2)\) 就是最高次项的次数,也就是所谓的 \(t\),所以正确思路就出来了。

思路

我们发现 \(x_2^{m_1+m_2}\le n\) 所以我们枚举 \(m_1+m_2\) 的值,除非 \(x_2=1\) 这个值必然小于 \(64\),所以首先我们特判 \(x_2\) 的值,接着我们对于每一个枚举的 \(m_1+m_2\)\(c_2\) 的贡献已经固定了,所以我们要使 \(c_1\) 的贡献尽量小,观看式子 \(x_1x_2^t>x_1x_2^{t-1}\) 所以我们要让 \(x_1x_2^t\) 的系数尽可能大,接着是 \(x_1x_2^{t-1}\) 的系数尽可能大,这样就能让系数之和尽可能小了,具体的可以尝试借助代码理解,我就使用了 \(int128\) 存储,不然可能炸掉。

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<climits>
#include<cmath>
#define ll __int128 using namespace std;
const ll Inf=0x3f3f3f3f3f3f3f3f,N=1e5+9;
ll n,x,xx,c,cc,a[N],ans;int main(){int garbage,T;cin>>garbage>>T;while(T--){long long inputn,inputx,inputc,inputcc,inputxx;cin>>inputn>>inputx>>inputc>>inputxx>>inputcc;n=inputn;x=inputx;c=inputc;xx=inputxx;cc=inputcc;if(xx<=1){if(x==0){cout<<"-1\n";continue;}if((n-1)%x==0) cout<<(long long)(c*(n-1)/x)<<endl;else cout<<"-1\n";continue;} ll cnt=1;a[0]=1;ans=Inf;while(a[cnt-1]<=n) a[cnt]=a[cnt-1]*xx,cnt++;cnt--;for(int i=cnt;i>=0;i--){ll nn=n-a[i],nans=i*cc;if(nn<0) continue;	for(int j=i;j>=0;j--){if(a[j]>(n+x-1)/x) continue;if(nn>=x*a[j]){ll tmp=nn/(x*a[j]);nans+=tmp*c;nn%=(x*a[j]);}}if(nn!=0) continue;ans=min(ans,nans);}if(ans==Inf) cout<<"-1\n";else cout<<(long long)ans<<endl;}   return 0;
}

后记

剩下的就是这个题目的思考了,写完了我仍然十分震撼我做出了这个题目,每一步仿佛都是机缘巧合,但是最后我还是死磕出来了,挺幸运的吧,如果下次没有这么幸运的话我还是希望我能通过我的努力把这种题目做出来,总结一下,以后遇到这种题目要愿意去推式子,求价值,不要怕就好了。

http://www.gsyq.cn/news/18859.html

相关文章:

  • P3605解题报告
  • C语言的“动态数组”
  • 详细介绍:Spring Boot 应用示例
  • (Sigcomm25) Stellar: 阿里新一代云AI RDMA网络
  • 背包 dp 历年真题:做题记录
  • 【触想智能】什么是工业平板电脑以及工业平板电脑对制造业具有什么意义
  • 虚树学习笔记
  • OUC《软件工程原理与实践》- 实验2:深度学习基础 - OUC
  • 类型转化
  • 事件驱动重塑 AI 数据链路:阿里云 EventBridge 发布 AI ETL 新范式
  • 我把Excel变成了像素画板!用Python实现图片到单元格的映射
  • 2025 年山东染井吉野樱 / 高杆染井吉野樱花 / 染井吉野樱花小苗厂家推荐:绿影园林的培育技术与全规格供应解析
  • 云存储成本自动优化技术解析
  • SAP 中CONCATENATE 空格的时候,空格不生效
  • OIFHA251011 比赛总结
  • 一种智能调度分布式路径计算解决方案
  • 实用指南:SDN 控制器深度剖析:架构、对比与实践部署
  • Halo RAG!
  • 2025 自动门生产厂家最新推荐榜:权威筛选优质品牌,含选购指南与实力厂家深度解析
  • 医德出诊排班挂号管理系统:医院高效运营与便民服务的智能解决方案
  • 2025 年北京市清理化粪池公司最新推荐排行榜:聚焦高压技术与全城服务的权威甄选朝阳区/丰台区/海淀区/通州区清理化粪池厂家推荐
  • 报表方案Stimulsoft 2025.4 重磅发布!新增AI报表助手、C#脚本支持、全新图表类型等多项功能!
  • Prometheus的Exporter的数据采集机制
  • 2025 年珠三角 / 中山 / 东莞 / 佛山厂房出售公司推荐:中创集团产业生态型厂房的价值与服务解析
  • 拷贝和上传文件,涉及隐私协议
  • 2025储罐厂家,钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐各类型最新推荐榜:品质卓越与技术创新的行业先锋!
  • 2025 年国内标志牌生产厂家最新推荐排行榜:聚焦优质企业助力客户精准选择道路/限速/公路/施工/警示/限高/三角/安全标志牌厂家推荐
  • 在Scala中,如何在泛型类中使用类型参数?
  • Maple 2025 来了!AI 赋能 + 6000 + 命令,破解数学计算、科研与教学痛点
  • 2025 护眼台灯厂家最新推荐榜单:权威解析明可达等五强品牌,护眼参数与选购指南全攻略