Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 343 C - 343 | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 220

問題概要

 N 以下の正整数であって回文立方数(立方数かつその文字列が回文となる数)であるものの最大値を求めよ。

制約

  •  N 10^{18} 以下の正整数

考察

 10^{18} 以下の立方数は高々  10^6 個しかないから、全て列挙してその中で回文となる最大の数を探していけばよい。

回文判定はAtCoderではしばしば問われるアルゴリズムなので、自分でライブラリ化しておくといいかも。

コード

#include <bits/stdc++.h>
using namespace std;

// ======================================== //

bool isPalindrome(string s)
{
    int l = s.size();
    for (int i = 0; i < l / 2; i++)
    {
        if (s[i] != s[l - i - 1])
            return false;
    }
    return true;
}

int main()
{
    ll N;
    cin >> N;

    ll ans = 0;
    for (ll i = 1; i * i * i <= N; i++)
    {
        if (isPalindrome(to_string(i * i * i)))
            ans = i * i * i;
    }

    cout << ans << endl;
}

atcoder.jp

実装時間: 5分