bzoj3957: [WF2011]To Add or to Multiply
我们可以强行拆一下柿子,最终得到的值会是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的更多相关文章
- leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)
https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, return mul ...
- [LeetCode] 415 Add Strings && 67 Add Binary && 43 Multiply Strings
这些题目是高精度加法和高精度乘法相关的,复习了一下就做了,没想到难住自己的是C++里面string的用法. 原题地址: 415 Add Strings:https://leetcode.com/pro ...
- UVA 1101 To Add or to Multiply
首先我们观察加操作和乘操作会对区间产生那些影响.加操作只会平移区间,而乘操作既能移动区间还能放大区间.因此我们不难想到,如果m>1的话乘操作是log级别的,一方面是因为区间的大小不能超过s-r, ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [LeetCode] Add Strings 字符串相加
Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...
- [LeetCode] 415. Add Strings 字符串相加
Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...
- C++ 关键字浅谈
这里有一个游戏:要求写一个符合C++标准的程序,包含至少十个连续而且不同的关键字.连续是指不能被标识符.运算符.标点符号分割.注意这里的“不同”要求,别想用 int main() { return s ...
- MongoDB 聚合操作
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- 一步一步HTML5粒子编辑器
写在前面 大家阅读此文之前,可以先看一篇MiloYip的文章:用JavaScript玩转游戏物理(一)运动学模拟与粒子系统,看完之后再看此文,更加容易理解. MiloYip使用的粒子是canvas中绘 ...
随机推荐
- Requests模拟登陆
requests模拟登陆知乎网站 实例 # -*- coding: utf-8 -*- __author__ = 'CQ' import requests try: import cookielib ...
- Java面试题总结之数据结构、算法和计算机基础(刘小牛和丝音的爱情故事1)
Java面试题总结之数据结构.算法和计算机基础(刘小牛和丝音的爱情故事1)mp.weixin.qq.com 全文字数: 1703 阅读时间: 大约6 分钟 刘小牛是一名Java程序员,由于天天9 ...
- Windows下maven安装配置(包括本地化仓库配置)
一.下载maven maven官网:http://maven.apache.org/ 下载下来也就是一个压缩文件,解压.我下载的是3.5.2版本,解压之后如下: 路径为 :D:\Program Fil ...
- 【Todo】【读书笔记】Career Cup 150笔记
下载了第五版:/Users/baidu/Documents/Data/Interview/算法与数据结构/<CareerCup+Top+150+Questions+5th.pdf> 参考这 ...
- zabbix之Low-level discovery(自动发现)
功能: 自动发现挂载点并自动监控 自动发现网卡并自动监控 创建自动发现挂载点并监控 功能 假如要在monitor_linux模板中创建自动发现挂载点的功能 配置-->模板-->选择模板-- ...
- Zabbix监控Mongo
安装Zabbix-agent # groupadd zabbix # useradd -g zabbix zabbix # yum -y install gcc mysql-community-dev ...
- ARM汇编指令MCR/MRC学习
MCR指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中.假设协处理器不能成功地运行该操作.将产生没有定义的指令异常中断. 指令的语法格式: MCR{<cond>} p15, 0, ...
- webpack4.0入门以及使用
1. 安装webpack 先新建一个文件夹(demos),然后 npm init -y 新建一个package.json然后在当前目录执行webpack命令 webpack 模块未发现或者未找到src ...
- DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1
DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1 AspxCheckBox 是一个检查编辑控件去展示特殊条件是否关闭或者打开.它一般会展示Yes/N ...
- HTML5面试题-b
感谢分享 面试有几点需要注意: 面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑. 题目类型: 技术视野.项目细节.理论知识型题,算法题,开放性题,案例题. 进行追问: 可以 ...