zoukankan      html  css  js  c++  java
  • P3235 [HNOI2014]江南乐

    传送门

    yyb巨巨的题解
    没看懂为什么整除分块的时候只要做两个就够了……

    //minamoto
    #include<bits/stdc++.h>
    #define R register int
    #define fp(i,a,b) for(R i=a,I=b+1;i<I;++i)
    #define fd(i,a,b) for(R i=a,I=b-1;i>I;--i)
    using namespace std;
    char buf[1<<21],*p1=buf,*p2=buf;
    inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
    int read(){
        R res,f=1;char ch;
        while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
        for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
        return res*f;
    }
    const int N=1e5+5;
    int SG[N],vis[N];
    int Sg(int x){
        if(SG[x]!=-1)return SG[x];
        for(R i=2,k;i<=x;i=k+1){
            k=x/(x/i);
            for(R j=i;j<=min(i+1,k);++j){
                R s=0;
                if((x%j)&1)s^=Sg(x/j+1);
                if((j-x%j)&1)s^=Sg(x/j);
                vis[s]=x;
            }
        }
        fp(i,0,N)if(vis[i]!=x)return SG[x]=i;
    }
    int main(){
    //	freopen("testdata.in","r",stdin);
        int T=read(),F=read();memset(SG,-1,sizeof(SG));
        fp(i,0,F-1)SG[i]=0;
        while(T--){
            int n=read(),s=0;
            while(n--)s^=Sg(read());
            printf("%d ",(bool)s);
        }return 0;
    }
    
  • 相关阅读:
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    [原]Unity3D深入浅出
    SSH 远程端口转发
    SSH 本地端口转发
    SSH执行远程命令和传送数据
  • 原文地址:https://www.cnblogs.com/bztMinamoto/p/10063380.html
Copyright © 2011-2022 走看看