摘要:
题意:给一棵树,每一个结点都有一个信息,每一个时刻,某一对相邻的结点之间可以传递信息,那么存在一个最少的时间,使得所有的节点都可以拥有所有的信息。但是,题目不是求最短时间,而是求最短时间的情况下,有多少种传递方式:某一时刻传递信息的双方不一样则认为是不同的传递方式。容易的出,最短的时间内,当然是每个节点将自己的信息想外传出去一次,并且接受一次信息,也就是树边的2倍【2*(n-1)】。然后可以证明,在最短时间内,所有的传递方式都有一个“信息转换点”——其他节点的信息首先传递到此节点,然后信息再从这个节点向其他节点传递。那么总方案数的计算就是可以枚举每个节点,将这个节点作为根节点,然后求当前情况下 阅读全文
摘要:
题意: 平面里给出M个三角形, N个圆形, 图形之间两两不相交, 求一个把这些图形围起来周长最小的一个圈的周长~分析:把三角形顶点分解成点, 对圆形求可能的切点:1.点和圆的两个切点, 2.圆和圆的外公切线切点。 然后对所有点求凸包, 处理周长的时候, 如果凸包上两个相邻点在同一个圆上, 则求相应的弧长~。此方法有个trick: 只有一个圆的时候需要特殊处理.#include#include#include#include#include#include#include#include#include#include#include#include#define tree int ... 阅读全文
摘要:
题目:给一个无向图,其中每个节点都有点权,边也有边权,然后就有2个小朋友开始做游戏了ALICE &BOB 游戏规定ALICE 先行动然后是BOB,然后依次轮流行动,行动时可以任意选取一个节点并获得节点的点权,如果他已经把一条边的2个端点都取了,那么他可以获得那边的边权,如果一条边的二个端点不同的人取了,那么谁也得不到那条变得边权了。 问游戏结束后怎样可以使ALICE得到的权值和减去BOB 的权值和最大,当然二个人都一样足够聪明,即每次行动都会采取最优的策略解法:若没有边权,则对点权从大到小排序即可。。考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。。。因为当两个人分别选择不同的 阅读全文
摘要:
#include#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson oq; q.push(1); while(!q.empty()) { int yu=q.front(); q.pop(); for(int i=0; i=0; i--) printf("%d"... 阅读全文
摘要:
#include#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson on) ans+=n-f[i-1]+1; else ans+=n-f[i-1]; } return ans;}bool check(LL k,LL m){ LL t=log10(k); if(k/f[t]==1&&k%f[t]==0&&t+... 阅读全文
摘要:
http://www.nocow.cn/index.php/Translate:URAL/1097#include#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson oa.d; }} node[M];void update(tree){ if(ql=r) { sum[o]=r-l+1; } else if(sum[o]==r-l+1) ... 阅读全文
摘要:
#include#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson o>1; setv[o=r) { setv[o]=val; sum[o]=val*(r-l+1); } else { pushdown(o,l,r); int mid=(l+r)>>1; if(qlmid) ... 阅读全文
只有注册用户登录后才能阅读该文。 阅读全文
摘要:
题意:求A^B的所有约数之和 Mod 9901。思路:大数模运算。两个最基本公式:(A*B)%C = ((A%C)*(B%C))%C 和 (A+B)%C = ((A%C)+(B%C))%C 。用__int64的原因为 n = cnt[i] * B (cnt[i]为A第i个素因子的个数)可能会超int。1: 对A进行素因子分解得A = p1^a1 * p2^a2 * p3^a3 *...*pn^an. 故A^B = p1^(a1*B) * p2^(a2*B) *...* pn^(an*B);2:A^B的所有约数之和为:sum = [1+p1+p1^2+...+p1^(a1*B)] * [1+p2 阅读全文
摘要:
#include<cstdio>#include<iostream>#include<cstdlib>#include<algorithm>#include<cmath>#include<string>#include<cstring>#include<set>#include<map>#include<list>#include<queue>#include<vector>#define tree int o,int l,int r#define l 阅读全文