gay队牛逼!

我们可以强行拆一下柿子,最终得到的值会是m^k*x+m^k*u(k)*a+m^k-1*u(k-1)*a……m^0*u(0)*a

其中u表示后面有i个m的a有多少个

答案就是k+∑u

枚举每一个k,然后贪心选择u(k),那么k越大u(k)也尽可能取大,答案才会越小

其实想过拆柿子的啊,但是有些u=0我把这些位给忽略掉啦,搞得不是很会

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
inline LL write(LL x)
{
if(x>=)write(x/);
putchar(x%+'');
} LL a,b,p,q,l,r;
LL mi[]; LL now,nt,np,psd[];
LL u[];
void pro(LL k)
{
np=;
if(k==){psd[++np]=u[],nt=;return ;} if(u[]!=)
nt=,psd[++np]=u[];
else nt=;
psd[++np]=;
for(LL i=;i<k;i++)
{
if(u[i]==)psd[np]++;
else psd[++np]=u[i],psd[++np]=;
}
if(u[k]!=)psd[++np]=u[k]; reverse(psd+,psd+np+);
nt=(nt+np+)%;
}
bool calc(LL k)
{
LL x=mi[k]*p,y=mi[k]*q; now=k;
memset(u,,sizeof(u));
if(x>=l){pro(k);return true;}
for(LL i=k;i>=;i--)
{
LL d=l-x;
u[i]=d/a/mi[i];
if(x+mi[i]*u[i]*a>=l){now+=u[i];pro(k);return true;}
else if(y+mi[i]*(u[i]+)*a<=r){now+=++u[i];pro(k);return true;}
else
{
now+=u[i];
x+=mi[i]*u[i]*a;
y+=mi[i]*u[i]*a;
}
}
return false;
} LL ans,ft,tp,num[];
bool smaller()
{
if(ans==-||ans>now)return true;
else if(ans<now)return false; if(nt<ft)return true;
else if(nt>ft)return false;
for(int i=;i<=now;i++)
if(psd[i]!=num[i])return ((i+nt)%==)^(psd[i]>num[i]);
}
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int T_T=;
while(scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&p,&q,&l,&r)!=EOF)
{
if(a==&&b==&&p==&&q==&&l==&&r==)break;
printf("Case %d: ",++T_T);
if(l<=p&&q<=r){puts("empty");continue;} ans=-;mi[]=;
for(LL k=;mi[k]*q<=r;k++)
{
if(mi[k]*q-mi[k]*p+>r-l+)break;
if(calc(k))
{
if(smaller())
{ans=now,ft=nt,tp=np;memcpy(num,psd,sizeof(num));}
}
mi[k+]=mi[k]*b;
if(b==)break;
}
if(ans==-){puts("impossible");}
else
{
for(LL i=;i<tp;i++)
write(num[i]),putchar(((i+ft)%==)?'A':'M'),putchar(' ');
write(num[tp]),putchar(((tp+ft)%==)?'A':'M'),puts("");
}
} return ;
}

bzoj3957: [WF2011]To Add or to Multiply的更多相关文章

  1. leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)

    https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, return mul ...

  2. [LeetCode] 415 Add Strings && 67 Add Binary && 43 Multiply Strings

    这些题目是高精度加法和高精度乘法相关的,复习了一下就做了,没想到难住自己的是C++里面string的用法. 原题地址: 415 Add Strings:https://leetcode.com/pro ...

  3. UVA 1101 To Add or to Multiply

    首先我们观察加操作和乘操作会对区间产生那些影响.加操作只会平移区间,而乘操作既能移动区间还能放大区间.因此我们不难想到,如果m>1的话乘操作是log级别的,一方面是因为区间的大小不能超过s-r, ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. [LeetCode] Add Strings 字符串相加

    Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...

  6. [LeetCode] 415. Add Strings 字符串相加

    Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...

  7. C++ 关键字浅谈

    这里有一个游戏:要求写一个符合C++标准的程序,包含至少十个连续而且不同的关键字.连续是指不能被标识符.运算符.标点符号分割.注意这里的“不同”要求,别想用 int main() { return s ...

  8. MongoDB 聚合操作

    在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...

  9. 一步一步HTML5粒子编辑器

    写在前面 大家阅读此文之前,可以先看一篇MiloYip的文章:用JavaScript玩转游戏物理(一)运动学模拟与粒子系统,看完之后再看此文,更加容易理解. MiloYip使用的粒子是canvas中绘 ...

随机推荐

  1. kali 1.1.0 boot failed

    从几个月前的14.10 daily 版本就有U盘刻录无法启动的现象,相关bug可参见:         https://bugs.launchpad.net/ubunt ... reator/+bug ...

  2. 关于parseDouble用法

    1.JAVA中的compareTo方法和strcmp完全类似,你可以使用 if(greeting.compareTo("help")==0).....或者用s.quals(t)来判 ...

  3. MySQL中blob 与 text

    BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. 有4种TEXT类型:TIN ...

  4. (5)ASP.NET Core 中的静态文件

    1.前言 当我们创建Core项目的时候,Web根目录下会有个wwwroot文件目录,wwwroot文件目录里面默认有HTML.CSS.IMG.JavaScript等文件,而这些文件都是Core提供给客 ...

  5. 单片机C51串口发送、接收寄存器

    所以,发送和接收寄存器可使用同一地址,编写验证程序(发送和接收是独立空间):读取一个数(1)->发送一个数(2)->再读取得1则是独立空间 不知道STM32串口寄存器和C51串口寄存器是否 ...

  6. ROS安装环境配置及多版本的切换

    环境配置: 为方便起见,我们可以在每次打开终端时让系统自动配置好ROS环境变量,方法如下: echo "source /opt/ros/hydro/setup.bash" > ...

  7. LeetCode:926. 将字符串翻转到单调递增

    暴力法超时:思想:动态规划 public int minFlipsMonoIncrb(String S) { int result = S.length(); for (int i = 0; i &l ...

  8. Mybatis批量插入与批量删除

    转自:http://www.cnblogs.com/liaojie970/p/5577018.html (一)批量插入 Mapper.xml: <?xml version="1.0&q ...

  9. 辅助方法 @Html.Raw与 HtmlString区别

    //Html.Raw其实是调用 new Microsoft.AspNetCore.Html.HtmlString(xxx) @{ ViewData["Title"] = " ...

  10. Material Theme

    Material Theme提供了一下功能: 1.系统widgets可以设置调色板 2.系统widgets的触摸反馈 3.Activity过渡动画 你可以根据你品牌的色彩来定义Material The ...