zoukankan      html  css  js  c++  java
  • P1432

      这个题是一个很简单的等比数列。

      题目大意是:初始第一步 $ n_1 = 2 $,之后的每一步都比前一步减少 98%,即满足等比数列 $ 2 + 2 imes 0.98 + 2 imes 0.98^2 + cdots leq K $ ,K 为某个上限值。

      利用 $ K = S_n = frac{2 (1 - 0.98)^n}{1 - 0.98} Rightarrow n = log_{0.98} (1 - frac{K}{100}) $

      貌似 math.h/cmath 中的log没有能指定任意底数的,但注意到 $ log_a b = frac{log_c b}{log_c a} $,所以也能计算。

      代码:

    #include <bits/stdc++.h>
    #define rep(i, a, b) for(int i = a; i < b; i++)
    #define min(a, b) ((a) < (b) ? (a) : (b))
    int gcd(int a, int b){return b == 0 ? a : gcd(a%b, a);}
    const int N = 1500000;
    int main()
    {
        double dis; int n;
        scanf("%lf", &dis);
        n = (int)ceil(log(1 - dis/100.)/log(0.98));
    	return printf("%d
    ", n), 0;
    }
    

      

  • 相关阅读:
    BZOJ1087=Codevs2451=洛谷P1896&P2326互不侵犯
    poj1286
    P1066 2^k进制数
    开车旅行
    洛谷P1396 营救
    poj1840
    poj3693
    poj1195
    3955 最长严格上升子序列(加强版)
    1021 玛丽卡
  • 原文地址:https://www.cnblogs.com/darkchii/p/9626411.html
Copyright © 2011-2022 走看看