結果

問題 No.2624 Prediction by Average
ユーザー zawakasuzawakasu
提出日時 2024-02-09 22:56:32
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 5 ms / 2,000 ms
コード長 2,886 bytes
コンパイル時間 2,111 ms
コンパイル使用メモリ 205,936 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2024-09-28 16:06:45
合計ジャッジ時間 2,334 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,820 KB
testcase_01 AC 3 ms
6,820 KB
testcase_02 AC 5 ms
6,820 KB
testcase_03 AC 2 ms
6,820 KB
testcase_04 AC 5 ms
6,816 KB
testcase_05 AC 5 ms
6,816 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function 'void generator(long long int&, std::string&)':
main.cpp:74:17: warning: narrowing conversion of '(mt.std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::operator()() % 100)' from 'std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::result_type' {aka 'long unsigned int'} to 'int' [-Wnarrowing]
   74 |     int f{(mt() % 100)};
      |           ~~~~~~^~~~~~
main.cpp:75:17: warning: narrowing conversion of '(mt.std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::operator()() % 1000)' from 'std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::result_type' {aka 'long unsigned int'} to 'int' [-Wnarrowing]
   75 |     int b{(mt() % 1000)};
      |           ~~~~~~^~~~~~~

ソースコード

diff #

#include <bits/stdc++.h>




namespace zawa {

using i16 = std::int16_t;
using i32 = std::int32_t;
using i64 = std::int64_t;
using i128 = __int128_t;

using u8 = std::uint8_t;
using u16 = std::uint16_t;
using u32 = std::uint32_t;
using u64 = std::uint64_t;

using usize = std::size_t;

} // namespace zawa


namespace zawa {

void SetFastIO() {
    std::cin.tie(nullptr)->sync_with_stdio(false);
}

void SetPrecision(u32 dig) {
    std::cout << std::fixed << std::setprecision(dig);
}

} // namespace zawa



namespace zawa {

i64 FloatingMarkerShift(const std::string& S, u32 shift) {
    static i64 lim10{std::numeric_limits<i64>::max() / 10};
    assert(not S.empty());
    i64 res{};
    u32 moved{};
    bool start{};
    bool minus{S[0] == '-'};
    for (u32 i{(u32)minus} ; i < S.size() ; i++) {
        if (S[i] == '.') {
            start = true;
        }
        else {
            if (start) moved++;
            assert(res < lim10);
            res = res * 10;
            assert(res < std::numeric_limits<i64>::max() - (S[i] - '0'));
            res += S[i] - '0';
        }
    }
    assert(moved <= shift);
    while (moved < shift) {
        moved++;
        assert(res < lim10);
        res = res * 10;
    }
    if (minus) res *= -1;
    return res;
}

}// namespace zawa
using namespace zawa;

void generator(long long& n, std::string& s) {
    std::mt19937 mt{std::random_device{}()};
    n = mt() % 10000000 + 1;
    int f{(mt() % 100)};
    int b{(mt() % 1000)};
    s = std::to_string(f) + "." + std::to_string(b);
}

long long brute(long long n, const std::string& in) {
    long long s{FloatingMarkerShift(in, 3)};
    long long res{};
    for (int i{1} ; i <= n ; i++) {
        long long ns{s * i}, ns1{(s + 1) * i};
        if ((ns1 / 1000) > (ns / 1000) or (ns % 1000 == 0)) res++;
    }
    return res;
}

long long solve(long long n, const std::string& in) {
    long long s{FloatingMarkerShift(in, 3)};
    long long ans{std::max(0LL, n - 1000 + 1)};
    for (long long i{1} ; i <= std::min(n, 999LL) ; i++) {
        long long ns{s * i}, ns1{(s + 1) * i - 1};
        if ((ns1 / 1000) > (ns / 1000) or (ns % 1000 == 0)) ans++;
    }
    return ans;
}

long long test() {
    long long n;
    std::string s;
    // generator(n, s);
    std::cin >> n >> s;
    return solve(n, s);
    // long long ushi{brute(n, s)}, your{solve(n, s)};
    // if (ushi == your) {
    //     return your;
    // }
    // else {
    //     std::cout << n << ' ' << s << std::endl;
    //     std::cout << ushi << std::endl;
    //     std::cout << your << std::endl;
    //     exit(0);
    //     return -1;
    // }
}

int main() {
    SetFastIO();

    int t; std::cin >> t;
    for (int _{} ; _ < t ; _++) {
        std::cout << test() << '\n';
    }
    // int t; std::cin >> t;
    // for (int _{} ; _ < t ; _++) {
    //     std::cout << solve() << '\n';
    // }
}
0