官方解题报告:
1001 Number Sequence 容斥定理+组合数
hdu
题意:
给你b1,b2,...bn个数,求存在多少个这样的序列a1,a2,a3....an满足a1*a2*a3*a3...an = b1*b2...*bn; ai>1
思路:
首先多谢日华兄热心的给我讲解,现在算是明白点了吧。a1*a2...*an = sum;我们首先将sum的所有质因子分解出来,然后就是将质因子分配到N个ai里面求有多少种可能。
sum = p1^k1*p2^k2*p3^k3*....*pn^kn
首先我们不考虑ai>1.那么我们的结果就是c(n + k1 - 1,k1 - 1)*c(n + k2 - 1,k2 -1)......*c(n + k3 - 1,k3 - 1); (c(n + ki - 1,ki -1)排列里面的挡板法) 只用组合数就可求得,二这里ai>1 也就是说每个ai必须分配到一个素因子,所以我们这里用容斥定理来求,枚举n到0表示a1 - an要分配素因子的位数,当有n位时时我们要求的解,可是这里用上述办法求的话就包含了ai = 1的情况情况,所以我们要去掉多加的。就用容斥定理;
View Code #include #include #include #include #include #include #include #include #include
1004 hdu 4393 Throw nails
题意:
n名队员参加自行车比赛,在第一秒内每个人都可以行走fi的距离,随后每个人都以各自的速度vi匀速往前前进,在每一秒LZ会扔出一个钉子,是走在最前边的选手爆胎淘汰,问输出选手们被淘汰的顺序,ps:如果行走的距离相同即两人在都以为置时,优先选择标号小的爆胎。
思路:
比赛时,只想到了O(N^2)的解法,这样肯定会超时,想了很长时间还是没有想到哎思路啊.这里关键在于速度速度最大才能达到100我们只需要开一个优先队列数组q[1..100]每次在这些优先队列里面取出f最大的,因为属于同样队列的速度肯定相同所以F大的肯定排在前边,然后就是取最值的问题了,时间复杂度为O(N*100).这里真的很巧妙就是没想出来。。
View Code #include #include #include #include #include #include #include #include #include
1005 hdu 4394
题意:
M2%10x=N (x=0,1,2,3....) 给你N求最小的非负整数M。。。
思路:
这里N到了10^9次方,计算几个式子可以发现,对于b为数的平方,他的平方后的数的后b为也就由它确定了,我们由N去枚举找M,最高只要枚举到第九位也就可以了。
23*23 = 329 123*123 = 15129 3123*3123 = 9753129 观察他们就会发现。
View Code #define MOD 100000007#define lc l,m,rt<<1#define rc m + 1,r,rt<<1|1#define pi acos(-1.0)using namespace std;ll len[] = { 1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000ll};int ans;int getlen(int x){ int i; for (i = 0; ; ++i) if (len[i] > x) return i;}void dfs(int x,int l,int xx,int maxL){ int i; if (l == maxL) { if (ans > x) ans = x; return ; } for (i = 0; i < 10; ++i) { ll tmp = len[l]*i + x; if ((tmp*tmp)%len[l + 1] == xx%len[l + 1])//满足继续枚举 dfs(tmp,l + 1,xx,maxL); }}int main(){ int t,n; scanf("%d",&t); while (t--) { ans = inf; scanf("%d",&n); int maxL = getlen(n); dfs(0,0,n,maxL); if (ans == inf) printf("None\n"); else printf("%d\n",ans); }}
1007 hdu 4396 More lumber is required
思路:二维SPFA:
View Code #include #include #include #include #include #include #include #include #include