题目大意:给定4个数,s,t,a,b

每次可以将s加a或者乘b,问最少多少次可以得到t

做法:考虑最后的形式,肯定是s*b^n + a*f(b),f(b)是关于b的多项式

那么b乘多少次实际上是可以知道的,然后枚举b的次数n

知道了t - s*b^n,接下来就是求f(b)了

可以知道,按照b进制做是最优的。

这里不能只算最大的n,我是把n从0到最大都算了一遍

因为有些情况较小的n得出的答案会更优。

还有这题的特殊情况相当多orz

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <typeinfo>
#include <fstream>
using namespace std;
typedef long long LL;
int f[];
class MultiplyAddPuzzle {
public:
long long minimalSteps(long long s, long long t, long long a, long long b) {
if(s > t && b != ) return -;
if(s == t) return ;
if(b == ){
if(a == ) return -;
if( (t-s)%a != ) return -;
return (t-s)/a;
}
if(b == ){
if(t == ) return ;
if(a == ) return -;
if(t > s && (t-s)%a == ) return (t-s)/a;
if( t%a == ) return t/a+;
return -;
}
if(a == ){
if(s == ) return -;
if(t%s != ) return -;
LL temp = t/s, ans = ;
while(temp != ){
if(temp % b != ) return -;
ans++; temp /= b;
}
return ans;
}
LL bt = , bpow = , temp = ;
while(s <= t/bpow){
if( (t-s*bpow)%a == ) f[bt] = , temp = bt;
bt++;
if(bpow > 2e18/b) break;
bpow *= b;
}
bt = temp;
if(bt == ) { if( (t-s)%a != ) return -; else return (t-s)/a; }
temp = ;
LL ANS = f[] == ? (t-s)/a : 2e18;
for(int i = ; i <= bt; i++) {
temp *= b;
if(!f[i]) continue;
bpow = temp;
LL ans = i, res = (t-s*bpow)/a;
while(res > ){
ans += res/bpow;
res %= bpow;
bpow /= b;
}
ANS = min(ANS, ans);
}
return ANS;
}
};

SRM707 div1 MultiplyAddPuzzle的更多相关文章

  1. CF#345 (Div1)

    论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...

  2. 图论 SRM 674 Div1 VampireTree 250

    Problem Statement      You are a genealogist specializing in family trees of vampires. Vampire famil ...

  3. jq对象转为dom对象:$(".div1")[0] dom对象转为jq对象:$(dom对象)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  4. 第一次div1做出3道题

    第一次div1做出3道题! 再接再厉! 哈利路亚!

  5. 第一次进div1了

    第一次进div1~好激动啊! 上帝依旧那么眷顾我!

  6. TopCoder 649 div1 & div2

    最近一场TC,做得是在是烂,不过最后challenge阶段用一个随机数据cha了一个明显错误的代码,最后免于暴跌rating,还涨了一点.TC题目质量还是很高的,非常锻炼思维,拓展做题的视野,老老实实 ...

  7. SRM DIV1 500pt DP

    SRM 501 DIV1 500pt SRM 502 DIV1 500pt SRM 508 DIV1 500pt SRM 509 DIV1 500pt SRM 511 DIV1 500pt SRM 5 ...

  8. codeforces #305 div1 done

    总算搞定了这一场比赛的题目,感觉收获蛮大 其中A,B,C都能通过自己的思考解决掉 D题思路好神,E题仔细想想也能想出来 以后坚持每两天或者一天做一场CF的div1的全套题目 除非有实在无法做出来的题目 ...

  9. [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】

    题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...

随机推荐

  1. Angular : 绑定, 参数传递, 路由

    如何把jquery导入angular npm install jquery --savenpm install @type/jquery --save-dev "node_modules/z ...

  2. php file_exists中文路径不存在问题

    php的file_exists函数使用中文路径,会显示文件不存在,即使文件已经存在了也会报这个错. 解决方法: <?php $file_name='D://360极速浏览器下载//a.txt'; ...

  3. docker和docker compose常用操作命令

    首先区分一下docker中几个概念 Image:镜像,相当于一个root文件系统,不包含任何动态数据 Container:容器,镜像运行时的实体,实质是进程,容器进程运行于属于自己的独立的命名空间 d ...

  4. mysql5.6主主复制及keepalived 高可用

    1.实验目的 mysql服务器作为生产环境中使用最广泛的数据库软件,以其开源性,稳定性而广泛使用,但同时由于数据存储,读写频率高,极易造成数据库出错,从而给企业造成不可挽回的损失,我们除了做好数据库的 ...

  5. Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...

  6. jenkins 构建部署时tomcat7 内存溢出解决方案

    在使用jenkins构建部署时一直出现tomcat7内存溢出 WARNING: Unexpected node monitoring termination: Clock Difference jav ...

  7. loj2587 「APIO2018」铁人两项

    圆方树orz,参见猫的课件(apio和wc的)以及这里那里 #include <iostream> #include <cstdio> using namespace std; ...

  8. SharePoint显示错误信息

         在SharePoint项目中,一般如果发生错误,SharePoint会弹出它自定义的报错页面,一般就显示"Something went wrong",如果光是看这一句话, ...

  9. CWindowWnd类源码分析

    CWindowWnd代码在UIBase.h和UIBase.cpp文件里.主要实现的是一个基本窗口的创建与消息处理. 相关代码: 头文件: class UILIB_API CWindowWnd { pu ...

  10. mybatis if标签比较字符串

    项目中需要在mybatis后台比较字符串 因为mybatis映射文件使用的是ognl表达式,所以不能使用 <if test="type == '0'"> 解决: < ...