SRM707 div1 MultiplyAddPuzzle
题目大意:给定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的更多相关文章
- CF#345 (Div1)
论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...
- 图论 SRM 674 Div1 VampireTree 250
Problem Statement You are a genealogist specializing in family trees of vampires. Vampire famil ...
- jq对象转为dom对象:$(".div1")[0] dom对象转为jq对象:$(dom对象)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 第一次div1做出3道题
第一次div1做出3道题! 再接再厉! 哈利路亚!
- 第一次进div1了
第一次进div1~好激动啊! 上帝依旧那么眷顾我!
- TopCoder 649 div1 & div2
最近一场TC,做得是在是烂,不过最后challenge阶段用一个随机数据cha了一个明显错误的代码,最后免于暴跌rating,还涨了一点.TC题目质量还是很高的,非常锻炼思维,拓展做题的视野,老老实实 ...
- 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 ...
- codeforces #305 div1 done
总算搞定了这一场比赛的题目,感觉收获蛮大 其中A,B,C都能通过自己的思考解决掉 D题思路好神,E题仔细想想也能想出来 以后坚持每两天或者一天做一场CF的div1的全套题目 除非有实在无法做出来的题目 ...
- [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】
题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...
随机推荐
- js-scroll判断页面是向上滚动还是向下滚动
原理:那当前的scrollTop和之前的scrollTop对比 如果变大了,表示向下滚动(scrollTop值变大): 如果变小了,表示向上滚动(scrollTop值变小). 方法一:js代码: $( ...
- PHP+AJAX开发幸运大转盘抽奖
PHP+AJAX开发幸运大转盘抽奖,通过奖品库存.中奖次数来计算中奖概率 奖品设置 $prizes = array( 0 => array( "id" => 0, // ...
- MySQL 清除表空间碎片
碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白.被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大; (2)当执行插入操作 ...
- Linux基础(04)、功能配置(调整防火墙、静态IP、环境变量)
目录 一.centos防火墙 二.VMware网络连接方式 2.1.连接方式:桥接.NAT.仅主机 2.2.常见问题 三.centos配置静态IP 四.环境变量 4.1.什么是环境变量 4.2.临时修 ...
- 自己动手编写 Dockerfile 构建自定义的Jenkins
1.构建jenkins 镜像 vim Dockerfile FROM jenkins USER root ARG dockerGid=999 RUN echo "docker:x:${d ...
- HyperLedger Fabric 1.4 超级账本组织(5.3)
超级账本组织分为TSC(技术指导委员会).Governing Board(董事会成员).LF Staffs(工作人员)三个组织,组织架构图如下: TSC:技术指导委会员,主导社区的开发工作,下设多个工 ...
- LeetCode:24. Swap Nodes in Pairs(Medium)
1. 原题链接 https://leetcode.com/problems/swap-nodes-in-pairs/description/ 2. 题目要求 给定一个链表,交换相邻的两个结点.已经交换 ...
- vTaskDelete(NULL)使用注意事项
在实际开发过程中,记录犯过的一个错误,如下 vTaskDelete(NULL); iccid_return_num = ; 错误原因分析,在任务删除之后(调用vTaskDelete(NULL)之后), ...
- html简单的分享功能
超级简单的分享. 包括:QQ.QQ空间.新浪微博.腾讯微博,微信(只是一个二维码): 1.首先是html代码: (前端我并不太会,一直用的都是bootstrap) <div class=&quo ...
- win10子系统Ubuntu18.04下安装图形界面
前提:windows 10 已经安装WSL(windows subsystem for linux),并能正确运行Bash. 要想使用Linux的图形用户界面通常有两种方法,一种是使用X-Window ...