
===数学===
Loi_a
这个作者很懒,什么都没留下…
展开
-
bzoj 1007 水平可见直线 贪心+初中数学
在xoy直角坐标平面上有n条直线L1,L2,…Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为 可见的,否则Li为被覆盖的. 例如,对于直线: L1:y=x; L2:y=-x; L3:y=0 则L1和L2是可见的,L3是被覆盖的. 给出n条直线,表示成y=Ax+B的形式(|A|,|B|<=500000),且n条直线两两不重合.求出所有可见的直线.对原创 2016-09-13 19:18:11 · 499 阅读 · 0 评论 -
bzoj 2440 完全平方数 莫比乌斯函数
二分答案,求1~n里有多少个非完全平方数。 ans=n - (n/2^2) - (n/3^2) - (n/5^2) - (n/7^2)…… 然后再加上出现两次的,减去出现三次的…… 这是莫比乌斯函数。#include<cmath>#include<cstdio>#include<iostream>#define maxn 60005#define LL long longusi原创 2017-04-17 12:36:45 · 479 阅读 · 0 评论 -
bzoj 2693 jzptab 莫比乌斯反演
首先,积性函数的约数和也是积性函数。 然后,比较尴尬的是我不太会用数学公式。 所以,大家就不要浪费时间看我写的博客。#include<cmath>#include<cstdio>#include<iostream>#define LL long long#define maxn 10000005using namespace std;LL mod=100000009;LL sum(原创 2017-04-17 12:43:16 · 458 阅读 · 0 评论 -
bzoj 1874 取石子游戏 博弈论
博弈论基础题,第一次写博弈论题目。 每堆石子的游戏是相互独立的,一个局面是由这n堆石子n个子游戏构成。 对于每堆石子,用sg[i]表示有i个石子的sg值,sg值由它的后继状态推过来:sg[i]=mex(sg[i-b[j]]); 最后的答案即为 : sg[ a[i] ] 的异或和;若ans=0则先手必败,否则先手必胜。 做第二问时,则按照输出的顺序枚举,第i堆移走k个的答案为ans^sg[a原创 2017-04-24 22:06:55 · 700 阅读 · 0 评论 -
bzoj 2179 FFT快速傅里叶
真 · 背板子。好像是用到了分治思想。#include<cmath>#include<cstdio>#include<cstring>#include<complex>#include<iostream>using namespace std;double pi=acos(-1);typedef complex<double> E;E a[140005],b[140005];voi原创 2017-04-25 12:31:33 · 510 阅读 · 0 评论 -
bzoj 1299 巧克力棒 博弈论
不考虑从盒子中拿出这一操作,则剩下的部分就是一个Nim游戏。所以先手第一次只要拿到异或和为零的巧克力棒就必胜。因为若对手选择吃巧克力棒,则是必败局面。若选择拿出巧克力,则新的异或和一定不为零,因为如果一组巧克力异或和为零,则先手可以第一次的时候拿出来。 直接dfs就可以。#include<cstdio>#include<iostream>using namespace std;int n;原创 2017-04-25 15:30:54 · 752 阅读 · 0 评论 -
bzoj 1188 分裂游戏 博弈论
同一堆里的每个豆子是相互独立的,sg[i]表示第i堆里一个豆子的sg值。 sg[i]=mex( sg[j]^sg[k] ) ;#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n;int p[30],sg[30];int use[1000];int main(){ int T原创 2017-04-25 15:37:12 · 482 阅读 · 0 评论 -
bzoj 1982 Moving Pebbles 博弈论
这道题不好想,可以先想先手必败的情况,一个比较显然的情况是石子个数成对出现时先手必败,因为先手怎样做后手可以完全模仿去做。然后还有没有其他情况呢,没有。其他情况把成对的抵消掉之后,我们可以将最大的补到其他的上面,还是可以凑成上述情况。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using name原创 2017-04-25 15:47:15 · 516 阅读 · 0 评论 -
bzoj 4600 硬币游戏 博弈论
反硬币操作与c无关,只与2和3的指数有关。设sg[i][j]为2和3的指数分别为i和j时,且前面的硬币都不可翻时的sg值。然后就可以枚举p,q,对于每一个p,q,它的sg值为 sg[i-k*q][j]的异或和以及sg[i][j-k*q]的异或和,求mex。#include<cstdio>#include<cstring>#include<iostream>#define maxn 30005原创 2017-04-25 15:54:29 · 820 阅读 · 0 评论 -
bzoj 4402 Claris的剑 组合数学
#include<cstdio>#include<iostream>#define LL long long #define maxn 4000005using namespace std;int N=4000000;LL mod=1e9+7;LL fac[maxn],inv[maxn];LL pow(LL x,int y){ if(y==0) return 1;原创 2017-04-01 15:05:29 · 521 阅读 · 0 评论 -
Codeforces 785 D 组合数阶乘逆元
我不会写公式……….#include<cstdio>#include<cstring>#include<iostream>#define maxn 200020#define LL long longusing namespace std;char s[maxn];LL inv[maxn],fac[maxn];int N=200002;LL mod=1e9+7;LL pow(LL原创 2017-03-31 19:34:38 · 542 阅读 · 0 评论 -
bzoj 1008 越狱 快速幂
#include<iostream>#include<cstdio>#define LL long longusing namespace std;LL k;LL ksm(LL x,LL y){ if(y==0) return 1; if(y==1) return x; LL a=ksm(x,y/2)%k; if(y%2)原创 2016-09-26 17:07:33 · 435 阅读 · 0 评论 -
bzoj 3098 Hash Killer II 生日悖论
#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int Rand(){ int r=rand()<<16; r=r|rand();}int main(){ srand(790); int n=100000; int l= Rand()%n+1;原创 2016-09-29 10:07:43 · 720 阅读 · 0 评论 -
bzoj3450 Tyvj1952 Easy 简单的数学期望
题目大意:一个长度为n(n<300,000)的序列,每个地方可以是o,x,?中的一个。‘?’表示x和o的概率各是50%。一个序列的权值是所有连续的‘o’长度的平方和,问给出序列的期望权值是多少。 例如 oo?xxo 如果’?’是’o’,则权值为3²+1²=10; 如果’?’是‘x’,则权值为2²+1²=5; 期望就是(10+5)/2=7.5;========================原创 2016-07-29 13:28:11 · 524 阅读 · 0 评论 -
bzoj 3155 Preprefix sum 树状数组
非常神奇的题目啊,我语文不好,所以不写题解了。#include<iostream>#include<cstdio>#define LL long longusing namespace std;int n,m;LL a[100005];LL c[100005];void change1(int x,LL d){ while(x<=n) { c[x]+=原创 2016-09-29 11:14:10 · 462 阅读 · 0 评论 -
noip2012 同余方程 exgcd
exgcd是求ax1+by1=gcd(a,b)的一组解。 ax1+by1 = gcd (a,b) bx2+(a%b) y2 = gcd (b,a%b)=> ax1+by1 = bx2+ (a%b) y2 ∵ a%b 可以写成 a-[a/b]*b => ax1+by1=ay2+b ( x2-[a/b]*y2 )=> x1 = y2 ; y1 = x2-[a/b]*y2原创 2016-11-09 16:10:29 · 677 阅读 · 0 评论 -
noip2014 解方程 Hash+数学
f(x)=0 ==> f(x)%p=0。但是f(x)%p=0不能推出f(x)=0。 如果对于许多个不同的p,f(x)%p=0 ,那么可看做f(x)=0; 所以选许多个(3个以上)质数p,f(x)都=0,那么x可以认为就是答案了。 枚举x,O(N)计算f(x)的值,时间复杂度O(N*M); 虽然说只要机子吊,十亿随便跑,但是CCF的算盘对这个复杂度还是很难接受的。 如果f(x)%p!=0,原创 2016-11-13 08:47:01 · 821 阅读 · 1 评论 -
SCOI 2010 生成字符串 组合数+逆元
计算组合数有许多方法,我先是分解质因数,但是这样效率非常低,1700ms。 然后求逆元,求解,时间复杂度为o(N).这个模数是质数,不用考虑逆元无解情况。#include<iostream>#include<cstdio>#define LL long longusing namespace std;LL K=20100403;LL x,y;void exgcd(LL a,LL b)原创 2016-11-16 20:15:18 · 442 阅读 · 0 评论 -
noip2016 换教室 期望+DP
考场一看见期望就怂了,于是去做第二题,做了两个多小时,没做出来。GG。 dp[ i ][ j ][0/1]表示前 i 节课申请 j 次的最小期望。然后[0]表示这次没申请,[1]表示已申请。 所以dp[i-1][j][1] 有f[i-1]的概率停在 d[i-1] 点,有(1 - f[i-1])概率停在c[i-1]点。 dp[i][j][0]=min dp[i-1][j][1] +dis[ d原创 2016-12-20 15:21:00 · 667 阅读 · 0 评论 -
bzoj 3944 Sum 杜教筛
我不太会用数学公式,但还是尽量写一写。其中sigma为求和,除法默认下取整。 令g(n)=sigma( d|n ) f(d); 令F(n)为f(n)的前缀和,G(n)为 g(n)的前缀和,要求F(n)。 G(n)=sigma(i=1~n) sigma( j|i ) f(j) ; G(n)=sigma(j=1~n) n/j * f(j) ; G(n)=sigma(j=1~n) F(n/j)原创 2017-04-25 16:14:27 · 619 阅读 · 0 评论