jzoj100023 【NOIP2016提高A组模拟7.6】塔
来源:互联网 发布:东莞数据恢复 dgfix 编辑:程序博客网 时间:2024/06/03 15:09
题意
在[1,m]中选出x,使得x能按下列规则变换尽量多次,在满足尽量多次的前提下求最大的x。
1. 若x>=1,则设a为小于等于x的最大完全立方数,x=x-a,重复步骤1
2. 若x=0,退出。
分析
我们设一个双值函数
设a为小于等于x的最大完全立方数.
我们希望将f分解为若干小问题(分治)。
假设当前这个放a的话,那么我们就有一个新的m取值范围
假设当前这个放a-1的话,那么我们就有一个新的m取值范围
假设当前这个放a-1的话,那么我们就有一个新的m取值范围
因为2与3对次数的贡献是一样的,所以自然是m2越大越好。因为
所以每次只需要取1,2者尝试。时间复杂度
暂时不会分析。
#include <cstdio>#include <iostream>#include <cmath>typedef long long ll;using namespace std;ll m,a,b;const double f3=(1/(double)3);void solve(ll x,ll &cnt,ll &X) { if (x==1) {cnt=1,X=1; return;} if (x==0) {cnt=0,X=0; return;} ll mx=pow(x,f3); ll a1,a2,b1,b2; solve(x-mx*mx*mx,a1,b1); solve(mx*mx*mx-1-(mx-1)*(mx-1)*(mx-1),a2,b2); cnt=max(a1,a2)+1; if (a1>=a2) X=b1+mx*mx*mx; else X=b2+(mx-1)*(mx-1)*(mx-1);}int main() { freopen("2.in","r",stdin); cin>>m; solve(m,a,b); cout<<a<<" "<<b<<endl;}
阅读全文
1 0
- jzoj100023 【NOIP2016提高A组模拟7.6】塔
- JZOJ100023. 【NOIP2016提高A组模拟7.6】塔
- JZOJ 100023 【NOIP2016提高A组模拟7.6】塔
- JZOJ 100024. 【NOIP2016提高A组模拟7.6】数球
- 【NOIP2016提高A组模拟9.3】树塔狂想曲
- 树塔狂想曲【NOIP2016提高A组模拟9.3】
- 【JZOJ4746】【NOIP2016提高A组模拟9.3】树塔狂想曲
- 【NOIP2016提高A组模拟7.15】立方体
- 计数【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.15】修路
- 【NOIP2016提高A组模拟7.15】计数
- 寻找【NOIP2016提高A组模拟7.17】
- 锦标赛【NOIP2016提高A组模拟7.17】
- nginx 配置虚拟主机步骤
- 【C语言】在VC中使用gotoxy函数实现光标的移动
- python 元类的理解
- 欢迎使用CSDN-markdown编辑器
- 5-9 字符串转换成十进制整数 (15分)
- jzoj100023 【NOIP2016提高A组模拟7.6】塔
- Draggabilly中文文档
- 1018. 锤子剪刀布 (20)
- getchar()
- 版本管理之gitlab实践教程:基础篇(8)
- zmq与libevent集成及丢包问题分析解决
- 单应矩阵 基本矩阵 本质矩阵的区别与联系
- xcode反汇编调试iOS模拟器程序(一)查看反汇编
- Java对日期Date类进行加减运算,年份加减,月份加减