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. 修改SecureCRT默认会话字符集

    修改SecureCRT默认会话字符集 1.找到SecureCRT配置文件 Default.ini 2.修改Default修改为UTF-8 将S:"Output Transformer Nam ...

  2. ES6 extends继承及super使用读书笔记

    extends 继承 extends 实现子类的继承 super() 表示父类的构造函数, 子类必须在 constructor中调用父类的方法,负责会报错. 子类的 this 是父类构造出来的, 再在 ...

  3. Navicat Premium Mac 12 破解

    破解地址:https://blog.csdn.net/xhd731568849/article/details/79751188 亲测有效

  4. centos 7忘记了root密码,如何改密码?

    今天服务器突然进不去了,不知道是密码被改了,还是什么情况! 服务器版本:centos 7.0 网上查找了很多文档,有些办法不可行,如果是亲自试过绝对可行的方法: 1:重启服务器,如下界面,按键盘 &q ...

  5. Linux下vim操作的一些使用技巧

    以下均为个人在编程时对vim编辑器的一些心得,大神请指点,新手可以看过来 1.多文本编辑 vim -On/-on filename_1 … filename_n 如上所示,在要编辑的文件名前加上“-O ...

  6. 制作linux系统U盘并使用U盘安装CentOS7.6系统

    目录   一.制作linux启动盘     1.1. 准备工作     1.2. 制作linux系统U盘   二.使用U盘安装Centos7.6     2.1. 使用U盘启动     2.2. 更改 ...

  7. P1414 又是毕业季II (数学?

    题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定 ...

  8. POJ:2429-GCD & LCM Inverse(素数判断神题)(Millar-Rabin素性判断和Pollard-rho因子分解)

    原题链接:http://poj.org/problem?id=2429 GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K To ...

  9. 【UE4】二十四、UE4内部版本引擎和官方版本引擎版本保持兼容的方法

    内部使用的引擎和官方正式发布的引擎版本号不一致,这种情况会导致一些插件由于版本不一致无法使用,有其是在没有插件源码的情况下.解决方法为 修改Engine\Source\Runtime\Launch\R ...

  10. Web安全1&沙箱隔离

    1.web安全 Web安全的本质是信任问题 •由于信任,正常处理用户恶意的输入导致问题的产生 •非预期的输入(就是不是程序员预期的客户的输入) 安全是木桶原理,短的那块板决定的木桶世纪能装多少水,同样 ...