码迷,mamicode.com
首页 > 其他好文 > 详细

51nod - 1586 - 约数和 - 水题

时间:2019-07-31 09:13:05      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:freopen   ems   ifd   nlogn   space   数字   ble   原因   ace   

https://www.51nod.com/Challenge/Problem.html#problemId=1586

一眼看过去居然一点思路都没有的,一言不合就打表,打贡献表。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int n = 25;
int a[200];

void update_b(int id) {
    for(int i = 1; i <= id; ++i) {
        if(id % i == 0) {
            a[i]++;
        }
    }
}

void show_c(int id) {
    memset(a, 0, sizeof(a));
    for(int i = 1; i <= id; ++i) {
        if(id % i == 0) {
            update_b(i);
        }
    }
    printf("c[%d]=\n  ", id);
    for(int i = 1; i <= n; ++i) {
        printf("%d%c", a[i], " \n"[i == n]);
    }
}

int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
#endif // Yinku
    for(int i = 1; i <= n; ++i) {
        show_c(i);
    }
    return 0;
}

好像a[i]位置对c[j]的贡献就是d(j/i)的样子,所以就预处理出d表就完事了?

数字不大,d表有nlogn的出法。但是暴力分解因子果断T,预处理所有数的因子也是T。原因在于因子是根号级别的,但是正解是直接更新a,是log级别的。

51nod - 1586 - 约数和 - 水题

标签:freopen   ems   ifd   nlogn   space   数字   ble   原因   ace   

原文地址:https://www.cnblogs.com/Yinku/p/11273735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!