zoukankan      html  css  js  c++  java
  • Ural_1013. Kbased Numbers. Version 3(dp + 高精度)

      昨晚想着做了的,到宿舍乱的又没心情了。发现高精度真的不熟,各种错误,Crash, MLE, WA。。。最后看到有人一个数组空间存两位数,精度为100时才不MLE。

    #include <iostream>
    #include <cstdio>
    #include <cstring>

    using namespace std;

    const int N = 1000;

    int ans[N*2][N+1];
    int tmp[N+1];

    void add(int a[], int b[], int res[]){
    int i;
    for(i = N; i >= 0; i--){
    res[i] = a[i] + b[i];
    }
    for(i = N; i >= 0; i--){
    res[i-1] += res[i]/100;
    res[i] %= 100;
    }
    }

    void mul(int a[], int k, int res[]){
    int i;
    for(i = N; i >= 0; i--){
    res[i] = a[i] * k;
    }
    for(i = N; i >= 0; i--){
    res[i-1] += res[i]/100;
    res[i] %= 100;
    }
    }

    void print(int res[]){
    int i = 0;
    while(res[i] == 0) i++;
    printf("%d", res[i++]);
    for(; i <= N; i++){
    if(res[i] > 9)
    printf("%d", res[i]);
    else
    printf("0%d", res[i]);
    }
    putchar('\n');
    }

    int main(){
    //freopen("data.in", "r", stdin);

    int n, k, i;
    while(scanf("%d%d", &n, &k) != EOF){
    //printf("%d %d\n", n, k);
    memset(ans, 0, sizeof(ans));

    ans[0][N] = k-1;
    ans[1][N] = k*(k-1);

    for(i = 2; i < n; i++){
    memset(tmp, 0, sizeof(tmp));
    add(ans[i-1], ans[i-2], tmp);
    mul(tmp, k-1, ans[i]);
    }
    print(ans[n-1]);
    }
    return 0;
    }



  • 相关阅读:
    Mysql 时间操作
    curl 学习
    CURL详解
    mysql 获取当前时间戳
    php开启openssl的方法
    0,null,empty,空,false,isset
    ecshop微信扫描支付开发
    seaJs的简单应用
    js运动框架之掉落的扑克牌(重心、弹起效果)
    js运动框架完成块的宽高透明度及颜色的渐变
  • 原文地址:https://www.cnblogs.com/vongang/p/2200367.html
Copyright © 2011-2022 走看看