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;
    }



  • 相关阅读:
    Ubuntu 安装mysql和简单操作
    fatal error: mysql.h: No such file or directory
    彻底删除win10系统下的mysql
    ORACLE 回收站导致的故障
    Log Buffer
    ORACLE数据库存储结构
    Shared pool
    ORACLE 实例及RAC
    Buffer Cache
    数据库dump导入
  • 原文地址:https://www.cnblogs.com/vongang/p/2200367.html
Copyright © 2011-2022 走看看