QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 256 MB 總分: 100

#10501. 折线

统计

Jasio 在一张巨大的方格纸上绘制折线。他从纸的左上角开始,在不抬起铅笔的情况下,通过以下三种方式之一绘制折线的后续线段:

(a) 向右沿方格边移动(长度为一个方格); (b) 向下沿方格边移动(长度为一个方格); (c) 向右下方沿方格对角线移动(长度为一个方格的对角线)。

下图展示了 Jasio 可能绘制的一个折线示例(由 4 条线段组成)。

Jasio 在画完折线后会计算其长度。为此,他编写了如下 C++ 函数:

std::string dlugosc(const std::string& lamana) {
    int proste = 0, przekatne = 0;
    for (char odcinek : lamana) {
        if (odcinek == 'c')
            przekatne++;
        else
            proste++;
    }
    long double wynik = sqrtl(2.0) * przekatne + proste;
    char buf[30];
    sprintf(buf, "%.6Lf", wynik);
    return buf;
}

函数 dlugosc 接收一个表示连续移动的字符串作为参数(字符 'a'、'b' 或 'c' 分别代表向右、向下或沿对角线移动)。sqrtl 是计算平方根的标准函数(来自 cmath 库)。你可以假设 dlugosc 函数在 Jasio 的电脑、你的比赛工作站以及评测系统中表现一致。

Jasio 给了你 dlugosc 函数的运行结果(至少他是这么声称的)。他想知道,有多少条由最多 $10^9$ 条线段组成的折线(对应函数合法的参数),其计算结果恰好等于这个值。请帮他回答这个问题。

输入格式

输入仅一行,包含一个实数 $l$ ($0 < l \le 10^9$),该数小数点后恰好有六位数字,表示 Jasio 给出的折线长度,同时也代表他声称的 dlugosc 函数的返回值。

输出格式

输出仅一行,包含满足条件的折线数量。如果该数量超过 $10^{18}$,则输出单词 SPORO

请记住,Jasio 可能在撒谎,他给出的数值可能根本不是任何合法参数下 dlugosc 函数的返回值——在这种情况下,应输出 0。

样例

输入 1

2.414214

输出 1

4

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.