orz 最近被水题卡+FST,各种掉rating

题目大意

一个数s它是n进制的,但是每一位不是用'A','B'....表示的,而是用10,11等等表示的,将它还原成十进制

这种表示方法显然会产生多解,然后求所有的解中最小的那个

这题一想就是贪心,但是一开始算法写渣了,改变思路以后才A的

简单来说就是从右边开始,把尽量多的数压到一位里面,这样会使数更小

压的思路可以这么考虑

每次新加进来一个数,如果加进来以后,已经大于原来的那个数,那么就找截取一段可行的最大数

这样考虑的目的是处理前导0带来的影响

0也有可能是单独的一位,也有可能与其他数压到同一位里

想清楚这个以后就不难写了

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
string str, n;
ll last, w;
bool compare(int x, int y)
{
if(y-x > n.length()) return true;
if(y-x < n.length()) return false;
for(int i = x; i < y; i++)
{
if(str[i] == n[i-x]) continue;
if(str[i] > n[i-x]) return true;
else return false;
}
return true;
}
ll cal(string str, int x, int y)
{
ll ans = ;
for(int i = x; i < y; i++)
ans = ans* + str[i] - '';
return ans;
}
int main()
{
cin>>n;
cin>>str;
ll ans = , k = ;
last = str.length();
for(int i = str.length()-; i >= ; i--)
{
while(compare(i, last))
{
int j;
for(j = i; j < last; j++)
{
if(str[j] == '') continue;
if(compare(j, last)) continue;
j++; break;
}
j--;
ans += cal(str, j, last)*k;
last = j;
k *= cal(n, , n.length());
}
}
if(last != ) ans += cal(str, , last)*k;
cout<<ans<<endl;
}

Codeforces Round #392(div 2) 758D (贪心)的更多相关文章

  1. Codeforces Round #392 (Div. 2)-758D. Ability To Convert(贪心,细节题)

    D. Ability To Convert time limit per test 1 second Cmemory limit per test 256 megabytes input standa ...

  2. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  3. Codeforces Round #547 (Div. 3) F 贪心 + 离散化

    https://codeforces.com/contest/1141/problem/F2 题意 一个大小为n的数组a[],问最多有多少个不相交的区间和相等 题解 离散化用值来做,贪心选择较前的区间 ...

  4. Codeforces Round #595 (Div. 3)D1D2 贪心 STL

    一道用STL的贪心,正好可以用来学习使用STL库 题目大意:给出n条可以内含,相交,分离的线段,如果重叠条数超过k次则为坏点,n,k<2e5 所以我们贪心的想我们从左往右遍历,如果重合部分条数超 ...

  5. Codeforces Round #554 (Div. 2) D 贪心 + 记忆化搜索

    https://codeforces.com/contest/1152/problem/D 题意 给你一个n代表合法括号序列的长度一半,一颗有所有合法括号序列构成的字典树上,选择最大的边集,边集的边没 ...

  6. Codeforces Round #303 (Div. 2) D 贪心

    D. Queue time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  7. Codeforces Round #392 (Div. 2)

    D题,给出n,k,k是n进制数,但是大于十进制时,它的表示方法仍为十进制那种,比如16进制下的15,我们可以看成就是15,或者1|5,也就是1×16+5 = 21,让你求出能表达的最小十进制数 从后面 ...

  8. Codeforces Round #545 (Div. 2) D 贪心 + kmp

    https://codeforces.com/contest/1138/problem/D 题意 两个01串s和t,s中字符能相互交换,问最多能得到多少个(可交叉)的t 题解 即将s中的01塞进t中, ...

  9. Codeforces Round #547 (Div. 3) G 贪心

    https://codeforces.com/contest/1141/problem/G 题意 在一棵有n个点的树上给边染色,连在同一个点上的边颜色不能相同,除非舍弃掉这个点,问最少需要多少种颜色来 ...

随机推荐

  1. git(将现有项目加入osChina)

    将现有项目加入osChina 在osChina中创建项目 注意不要初始化项目.(其实初始化也没有什么问题,可以直接clone到本地,再把项目添加进去就行了,后续操作一样的) 项目现在基本为空,得到项目 ...

  2. 在centos7云服务器上搭建Apache服务器并访问到你的网站

    使用X-shell ssh安全连接到云服务器 https://mail.qq.com/cgi-bin/mail_spam?action=check_link&url=https://www.n ...

  3. 【学时总结】 ◆学时·II◆ IDA*算法

    [学时·II] IDA*算法 ■基本策略■ 如果状态数量太多了,优先队列也难以承受:不妨再回头看DFS-- A*算法是BFS的升级,那么IDA*算法是对A*算法的再优化,同时也是对迭代加深搜索(IDF ...

  4. MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!

    最近在工作中遇到一个问题: 我们系统的一些逻辑处理是用存储过程实现的,但是有一天客服反馈说订单下单失败,查了下单牵扯到的产品基础资源,没有问题. 下单的存储过程中有这样两句代码: ; ; ; 执行存储 ...

  5. 死锁-Java代码示例

    class MyThread implements Runnable{ private Object o1 = new Object(); private Object o2 = new Object ...

  6. linux 安装mysql5.6 yum

    安装mysql: 查看mysql: rpm -qa | grep -i mysql 安装必要的环境 yum -y install gcc gcc-c++ ncurses-devel perl 查看环境 ...

  7. 【linux】【指令】systemctl 指令部分解读

    systemctl [OPTIONS...] {COMMAND} ... Query or send control commands to the systemd manager. -h --hel ...

  8. Python学习第一弹

    开发语言: 高级:Python.java.PHP  C#   GO  ruby   C++           ——>字节码   低级:C.汇编                          ...

  9. 基于原版Hadoop的YDB部署(转)

    YDB依赖环境准备 一.硬件环境 硬件如何搭配,能做到比较高的性价比,不存在短板.合理的硬件搭配,对系统的稳定性也很关键. 1.CPU不是核数越高越好,性价比才是关键. 经常遇到很多的企业级客户,他们 ...

  10. Linux 安装github并配置ssh

    首先,你得有个github帐号. 1.用apt-get install git的方式安装git test@er:/$ sudo add-apt-repository ppa:git-core/ppa ...