标签: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级别的。
标签:freopen ems ifd nlogn space 数字 ble 原因 ace
原文地址:https://www.cnblogs.com/Yinku/p/11273735.html