随笔分类 - 数学
摘要:根据博弈论的两条规则:一个状态是必胜状态当且仅当有一个后继是必败状态一个状态是必败状态当且仅当所有后继都是必胜状态然后很容易发现从1开始,前p个状态是必败状态,后面q个状态是必胜状态,然后循环往复。 1 #include 2 3 int main() 4 { 5 int n, p, q;...
阅读全文
摘要:这是由n个巴什博奕的游戏合成的组合游戏。对于一个有m个石子,每次至多取l个的巴什博奕,这个状态的SG函数值为m % (l + 1)。然后根据SG定理,合成游戏的SG函数就是各个子游戏SG函数值的异或和。 1 #include 2 3 int main() 4 { 5 int T, n; ...
阅读全文
摘要:如果n在[2, 9]区间,那么Stan胜。如果n在[10, 18]区间,那么Ollie胜,因为不管第一次Stan乘上多少,第二次Ollie乘上一个9,必然会得到一个不小于18的数。如果n在[19, 162]这个区间呢?比如说n=19,那么Stan乘上个2,不管Ollie怎么乘,Ollie得到的数必然...
阅读全文
摘要:首先如果第一个数字是0的话,那么先手必胜。对于一个已知的先手必败状态,凡是能转移到先手必败的状态一定是必胜状态。比如1是必败状态,那么2~9可以转移到1,所以是必胜状态。10,10*,10**,10***,10****也都可以删除1后面那个0,转移到1,所以也是必胜状态。 1 #include 2...
阅读全文
摘要:参见上一篇博客,里面有分析和结论。 1 #include 2 3 int main() 4 { 5 int T; scanf("%d", &T); 6 while(T--) 7 { 8 int n, a, c = 0, xorsum = 0;//c为充裕堆...
阅读全文
摘要:一些概念和约定:公平游戏: 这里讨论的组合游戏都是公平游戏,也就是说一个游戏者可以把状态A变成B,那么另一个游戏者也可以。比如下棋就不是公平游戏,因为白方可以移动白子而黑方不能。状态图: 我们可以把游戏的状态用图的形式来组织。一个状态是一个节点,一条边代表通过一次操作将一个状态转移到另一个状态。...
阅读全文
摘要:n位不含前导零不含连续1的数共有fib(n)个,fib(n)为斐波那契数列。所以可以预处理一下fib的前缀和,查找一下第n个数是k位数,然后再递归计算它是第k位数里的多少位。举个例子,比如说要找第11个数,发现它是个5位数,所以最高位是个1,然后它还是5位数里的第4个数。这时要找第三个数了,因为后面...
阅读全文
摘要:这个题和UVa11529很相似。枚举一个中心点,然后按极角排序,统计以这个点为钝角的三角形的个数,然后用C(n, 3)减去就是答案。另外遇到直角三角形的情况很是蛋疼,可以用一个eps,不嫌麻烦的话就用整数的向量做点积。 1 #include 2 #include 3 #include 4 us...
阅读全文
摘要:和UVa11077的分析很类似。我们固定左脚的鞋子不动,然后将右脚的鞋子看做一个置换分解。对于一个长度为l的循环节,要交换到正确位置至少要交换l-1次。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 bool vis[...
阅读全文
摘要:我看大多数人的博客只说了一句:找规律得答案为(n + m) / gcd(n, m)不过神题的题解还须神人写。。We can associate at each cell a base 3-number, the log3(R) most significant digits is the index...
阅读全文
摘要:枚举一个中心点,然后将其他点绕着这个点按照极角排序。统计这个中心点在外面的三角形的个数,然后用C(n-1, 3)减去这个数就是包含这个点的三角形的数量。然后再枚举一个起点L,终点为弧度小于π的点R。在[L+1, R]任取两点再加上起点,这些三角形都不包含中心点。 1 #include 2 #inc...
阅读全文
摘要:用6种颜色去染正方体的12条棱,但是每种颜色都都限制了使用次数。要确定正方体的每一条棱,可以先选择6个面之一作为顶面,然后剩下的四个面选一个作为前面,共有24种。所以正方体的置换群共有24个置换。具体每种置换的情况就是:UVA 10601 Cubes幸运的是,任意一个置换中的循环节长度都是相同的(有...
阅读全文
摘要:这种1A的感觉真好 1 #include 2 #include 3 #include 4 using namespace std; 5 typedef long long LL; 6 7 struct Point 8 { 9 LL x, y;10 Point(LL x=0, ...
阅读全文
摘要:如果用容斥原理递推的办法,这道题确实和LA 3720 Highway很像。看到大神们写的博客,什么乱搞啊,随便统计一下,这真的让小白很为难,于是我决定用比较严格的语言来写这篇题解。整体思路很简单:m*n的方格,其格点是(m+1)*(n+1)的点阵,选三个点有C((m+1)*(n+1), 3)中情况,...
阅读全文
摘要:从反面考虑,统计非单色三角形的个数。如果从一个点出发两条不同颜色的边,那么这三个点一定构成一个非单色三角形。枚举一个顶点,统计从这个点出发的红边的个数a[i]和蓝边的个数n - 1 - a[i],这样以该点为顶点的非单色三角形的数目为a[i] * (n - 1 - a[i])由于每个单色三角形计数了...
阅读全文
摘要:在纸上演算一下就能看出答案是:sum{ C(n-1, i) * a[i] / 2^(n-1) | 0 ≤ i≤n-1 }组合数可以通过递推计算:C(n, k) = C(n, k-1) * (n-k-1) / k但是n太大了,直接计算组合数会爆double的。所以计算的时候要取一下对数就行了,组合数对...
阅读全文
摘要:一个数字能被3整除就等价于这个数的各个数字之和被3整除。所以一开始的时候先要拿一个能使剩下的数字是3的倍数的数。然后就一直拿0、3、6、9直到某人不能再拿为止。 1 #include 2 #include 3 4 const int maxn = 1000 + 10; 5 char s[max...
阅读全文
摘要:输出第n个回文数。规律就是一位和两位的回文数各有9个,三位四位的回文数各有90个,以此类推。给出n,可以先判定一下第n个回文数的位数,然后后面也不难推,但是有很多细节需要注意。 1 #include 2 #include 3 #include 4 using namespace std; 5 ...
阅读全文
摘要:n个人里选k个人有C(n, k)中方法,再从里面选一人当队长,有k中方法。所以答案就是第一步的变形只要按照组合数公式展开把n提出来即可。 1 #include 2 3 typedef long long LL; 4 const LL M = 1000000007; 5 6 LL pow(int...
阅读全文
摘要:n个可重复的元素的排列一共有= All种,其中假设这些数依次为ai,每种数字有mi个。从右往左考虑第d位数(d≥0),第i个数字出现的次数为,那么这个数字对所求答案的贡献为其实可以先一次求出个位上每种数字对答案的贡献,然后乘上 1 #include 2 #include 3 using name...
阅读全文

浙公网安备 33010602011771号