bzoj 4589 Hard Nim - FWT - 学习笔记

5人阅读 评论(0) 收藏 举报
分类:

并不知道为啥是对的
屯板子

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 200010
#define lint long long
#define mod 1000000007
#define inv2 500000004
using namespace std;
bool isp[N];int a[N],ans[N],t1[N],t2[N];
int fwt(int *a,int n)
{
    for(int i=1;i<n;i<<=1)
        for(int j=0,p=i<<1;j<n;j+=p)
            for(int k=0,x,y;k<i;k++)
                x=a[j+k],y=a[j+k+i],a[j+k]=(x+y)%mod,a[j+k+i]=(x-y+mod)%mod;
                //and a[j+k]=x+y
                //or a[j+k+i]=x+y
    return 0;
}
int ufwt(int *a,int n)
{
    for(int i=1;i<n;i<<=1)
        for(int j=0,p=i<<1;j<n;j+=p)
            for(int k=0,x,y;k<i;k++)
                x=a[j+k],y=a[j+k+i],
                a[j+k]=(lint)inv2*(x+y)%mod,a[j+k+i]=(lint)inv2*(x-y+mod)%mod;
                //and a[j+k]=x-y
                //or a[j+k]=y-x
    return 0;
}
inline int get_ans(int *a,int *ans,int n,int k)
{
    fwt(ans,n),fwt(a,n);
    while(k)
    {
        if(k&1) for(int i=0;i<n;i++) ans[i]=(lint)ans[i]*a[i]%mod;
        for(int i=0;i<n;i++) a[i]=(lint)a[i]*a[i]%mod;k>>=1;
    }
    return ufwt(ans,n);
}
int main()
{
    int n,m=50000;
    for(int i=2;i<=m;i++) isp[i]=true;
    for(int i=2;i<=m;i++) if(isp[i])
        for(int j=i;(lint)i*j<=m;j++) isp[i*j]=false;
    while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
    {
        int L=1;while(L<=m) L<<=1;
        for(int i=0;i<L;i++) a[i]=0;
        for(int i=1;i<=m;i++) a[i]=isp[i];
        for(int i=0;i<L;i++) ans[i]=0;ans[0]=1;
        get_ans(a,ans,L,n),printf("%d\n",ans[0]);
    }
    return 0;
}
查看评论

bzoj 4589: Hard Nim 异或规则下的多项式乘法

定义(a$b)i = Σaj * bi^j ,那么题目相当于求A^N的第0项,其中Ai=[i为质数且i        显然我们可以用快速幂+分治乘做到N^1.59logN,光荣TLE。        ...
  • lych_cys
  • lych_cys
  • 2016-05-17 16:19:05
  • 1685

[FWT] BZOJ 4589 Hard Nim

FWT相关 Fast Walsh-Hadamard Transform (快速沃尔什变换)#include #include #include using namespace std; typede...
  • u014609452
  • u014609452
  • 2017-04-09 20:42:02
  • 503

bzoj4589 Hard Nim

http://www.lydsy.com/JudgeOnline/problem.php?id=4589 题意:石子堆数为N且每堆石子的数量都是不大于M的质数的Nim游戏,求先手必败的局面数量模10...
  • jr_mz
  • jr_mz
  • 2016-06-07 22:03:48
  • 1287

BZOJ 4589(Hard Nim-FWT测试)

题目:给n个不超过m的素数,求xor和=0的方案数,FWT变换裸题。 题目2关于F逆元的公式: inv(2)=(F+1)>>1inv(2)=(F+1)>>1 证:[(F+1)>>1]∗2(mod...
  • nike0good
  • nike0good
  • 2017-01-22 00:41:14
  • 351

BZOJ 4589: Hard Nim SJ定理 FWT

4589: Hard Nim Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 521  Solved: 281 [Submit][Status]...
  • BlackJack_
  • BlackJack_
  • 2017-12-04 17:48:02
  • 94

HYSBZ 4589 Hard Nim (FWT)

Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1. Claris和NanoApe两个人轮流拿石子,Claris先拿。 2. 每次只能从一堆中取若干个,可将一堆全取走,但不可...
  • Wang_SF2015
  • Wang_SF2015
  • 2018-01-31 20:32:28
  • 25

bzoj 4589 Hard Nim

FWT
  • chai_jing
  • chai_jing
  • 2017-06-23 11:07:50
  • 110

4589: Hard Nim

题意: 问n个小于等于m的质数异或值为0的方案数。 题解: FWTFWTFWT裸题,将小于m的质数标为1,其它为0,然后FWTFWTFWT后快速幂。 orz:快速沃尔什变换学习小记 感觉...
  • qq_36808030
  • qq_36808030
  • 2018-03-01 22:08:00
  • 14

BZOJ 4589 Hard Nim(博弈论+FWT+快速幂)

DescriptionClarisClaris和NanoApeNanoApe在玩石子游戏,他们有nn堆石子,规则如下:11. ClarisClaris和NanoApeNanoApe两个人轮流拿石子,C...
  • V5ZSQ
  • V5ZSQ
  • 2017-12-22 21:15:54
  • 203

[bzoj4589]Hard Nim【FWT】

【题目链接】   http://www.lydsy.com/JudgeOnline/problem.php?id=4589 【题解】   就是求nnn堆石子异或和为000的方案数。   这个东...
  • D_Vanisher
  • D_Vanisher
  • 2018-03-07 13:09:39
  • 10
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 2120
    排名: 2万+
    最新评论