
UVa
如题
Yuhan の Blog
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVa 11174 Stand in a Line(递推+排列组合+逆元)
思路: 1.我们首先根据父子关系可以建立一棵树(或者森林),我们设立一个虚根连接森林中所有树的根结点,那么一颗树就建好了,我们标记虚根为序号0; 2.我们设f(i)f(i)f(i)表示以iii为根节点的树,这些人的排列总数,我们设s(i)s(i)s(i)表示以iii为根结点的树的结点数量,根据排列组合的知识我们可以得到 f(i)=(∏f(c))∗(s(i)−1)!∏s(c)!f(i)= \fra...原创 2019-12-04 16:06:23 · 325 阅读 · 0 评论 -
UVa 11375 Matches(递推+高精度)
思路: 1.设d[i]是恰好用完i根火柴所获得的数字种数,设c[i]是用i根火柴可以搭出的数字(单个数字0~9);则有c[8]={0,0,1,1,1,3,3,1}; 2.我们首先将d[i]初始化,让搭完一个数字的情况先存在d[i]中,目的就是第一个数字不搭0;则此时d[]={0,0,1,1,1,3,2,1}; 3.我们已知搭一个数字至少需要两根火柴,最多需要7根,我们从i=2开始遍历d[i],则...原创 2019-12-04 14:05:39 · 286 阅读 · 0 评论 -
UVa 11806 Cheerleaders(计数问题)
思路: 1.设情况A第一行没有拉拉队员,情况B最后一行没有拉拉队员,情况C第一列没有拉拉队员,情况D最后一列没有拉拉队员; 2.每种情况只有0和1两种取值,我们将它们排列,就可以用二进制0000~1111来表示这161616种情况; 3.当然了,情况是会重复的,如下图;(设全集为) 4.此时我们可以观察到这四种情况,重叠的层数为偶数的我们就将它加上,为奇数就减去,就可以正好得到S-(A U B ...原创 2019-12-03 19:27:29 · 212 阅读 · 0 评论 -
UVa 11401 Triangle Counting(计数问题)
思路: 1.我们设最长边为xxx的三角形有c(x)c(x)c(x)个,另外两条边长为yyy和zzz,我们将yyy从111取到x−1x-1x−1,那么zzz,对应的取值种数分别为0,1,2,...,x-2,我们将它们相加; 2.随后减去yyy和zzz相同的种数,因为每一对yyy和zzz,它们的值如果互换那也是成立的,因此现在的种数有一半是重复的,除以222即可; 3.随后使用前缀和思想,先用O(n...原创 2019-12-03 19:14:17 · 238 阅读 · 0 评论 -
UVa 11538 Chess Queen(计数问题)
思路: 1.两个皇后在同一行的方案数为nm(m-1); 2.同一列的方案数为nm(n-1); 3.我们画出所有平行的对角线,可以发现这些对角线从左到右的长度分别为1,2,3,...,n-1,n,...n,n-1,...3,2,1,其中共有m-n+1个n,每个长度为k的对角线都可以产生k(k-1)种方案,然后依次计算即可,要注意另一个方向也有对角线,最后乘2就可以了; 4.需要用到以下的公式: 1...原创 2019-12-03 19:03:07 · 141 阅读 · 0 评论 -
UVa 10006 Carmichael Numbers(快速幂)
思路: 1.先判断是不是素数; 2.再按题意遍历2~n-1即可,用快速幂加速就可以了;(注意用long long) 代码: #include<iostream> using namespace std; typedef long long LL; bool isPrime(int n){ for(int i=2;i*i<=n;i++) if(n%i==0) return f...原创 2019-12-02 18:39:32 · 141 阅读 · 0 评论