前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小码匠自习室】double的坑好深:ABC185 - C - abc285_brutmhyhiizp

【小码匠自习室】double的坑好深:ABC185 - C - abc285_brutmhyhiizp

作者头像
小码匠
发布2023-03-06 14:34:50
6010
发布2023-03-06 14:34:50
举报
文章被收录于专栏:小码匠和老码农

诡异

3个示例都通过了,可提交上去,有3个case没过,搞的我一头雾水,有些懵圈。

老码农让我又加测了几个case,让我注意边界值,我测了机组,都没有问题啊。

往往这个时候,老码农同学就该操刀上场了。他的经典台词:姜是老的辣,看我的。

果然不服还是不行,他劈里啪啦测试了几组数据,就测出bug了。

题目的示例数据

代码语言:javascript
复制
BRUTMHYHIIZP

输出结果是

代码语言:javascript
复制
10000000000000000

他测试时输入

代码语言:javascript
复制
BRUTMHYHIIZQ

而输出结果,还是

代码语言:javascript
复制
10000000000000000

肯定是不对的,我扫了下代码,判断应该是pow函数搞的鬼,那我就不用你了。

详细看后面的代码。

补充知识点

且看,pow函数的参数

代码语言:javascript
复制
pow(double _X, double _Y)

pow函数的输入和输出都是double,肯定是精度出问题了。此时,可以考虑用快速幂来解决精度问题

知识点

  • 快速幂
    • https://oi-wiki.org/math/binary-exponentiation/

题目

在另一个世界的AtCoder上举办的AtCoder Big Contest将一次性出现

10^{16}

问题。

问题的ID从第一个问题开始依次为AB,…,Z, AA, AB, ..., ZZ, AAA, ... 来定义自定义外观。

也就是说,ID是按照以下顺序附加的。

  • 按字典顺序排列长度为1的大写字母字符串
  • 按字典顺序排列长度为2的大写字母字符串
  • 按字典顺序排列长度为3的大写字母字符串
  • ......

这个竞赛包含的问题的ID的字符串S被给予,请回答那个是第几个问题。

制約
  • S作为AtCoder Big Contest中包含的问题的ID是正确的

入力
代码语言:javascript
复制
S
出力

把答案作为整数输出。


入力例 1
代码语言:javascript
复制
AB
出力例 1
代码语言:javascript
复制
28

ID为AB的问题是AtCoder Big Contest的第28个问题。


入力例 2
代码语言:javascript
复制
C
出力例 2
代码语言:javascript
复制
3

ID为C的问题是AtCoder Big Contest的第三个问题。


入力例 3
代码语言:javascript
复制
BRUTMHYHIIZP
出力例 3
代码语言:javascript
复制
10000000000000000

ID为BRUTMHYHIIZP的问题是AtCoder Big Contest的

10^{16}

问题,即最终问题。

小码匠

代码
  • AC
代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
 
void best_coder() {
    string s;
    cin >> s;
    unsigned long long ans = 0;
    int j = 0;
    for (int i = s.size() - 1; i >= 0; --i) {
        long long p = 1;
        for (int j = 0; j < i; ++j) {
            p *= 26;
        }
        ans += (s[j] - 'A' + 1) * p;
        ++j;
    }
    cout << ans;
}
 
void happy_coder() {
}
 
int main() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
 
    // 小码匠
    best_coder();
 
    // 最优解
    // happy_coder();
 
    // 返回
    return 0;
}

AC: 47 WA: 3

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
 
void best_coder() {
    string s;
    cin >> s;
    long long ans = 0;
    long long j = 0;
    for (long long i = s.size() - 1; i >= 0; --i) {
        ans += (s[j] - 'A' + 1) * pow(26, i);
        ++j;
    }
    cout << ans;
}
 
void happy_coder() {
}
 
int main() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
 
    // 小码匠
    best_coder();
 
    // 最优解
    // happy_coder();
 
    // 返回
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 诡异
  • 补充知识点
  • 题目
    • 制約
      • 入力
        • 出力
          • 入力例 1
            • 出力例 1
              • 入力例 2
                • 出力例 2
                  • 入力例 3
                    • 出力例 3
                    • 小码匠
                      • 代码
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档