西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
西西首頁(yè) 電腦軟件 安卓軟件 電腦游戲 安卓游戲 排行榜 專(zhuān)題合集

HNOI2014題解及數(shù)據(jù)

  • HNOI2014題解及數(shù)據(jù)
  • 軟件大小:25M
  • 更新時(shí)間:2014-05-17 11:13
  • 軟件語(yǔ)言:中文
  • 軟件廠(chǎng)商:
  • 軟件類(lèi)別:國(guó)產(chǎn)軟件 / 免費(fèi)軟件 / 電子資料
  • 軟件等級(jí):4級(jí)
  • 應(yīng)用平臺(tái):WinAll, Win7
  • 官方網(wǎng)站:http://www.innovatechautomation.com
  • 應(yīng)用備案:
好評(píng):50%
壞評(píng):50%

軟件介紹

HNOI2014題解及數(shù)據(jù),包括標(biāo)程及試題

solution: 

明顯的組合游戲,暴力N^2求出所有的狀態(tài)的SG值,復(fù)雜度就是O(N^2) 可以70分
然而我們發(fā)現(xiàn)在可以分開(kāi)枚舉:最小的數(shù)字小于等于sqrt(N),分割的數(shù)目小于sqrt(N)所以可以做到O(Nsqrt(N))可以過(guò)掉本題,不過(guò)很多細(xì)節(jié)需要處理確實(shí)比較惡心
code:
#include
#include
#include
#include
#define MAXN 100010
int f,n,m,T,a,g,ans,now;
using namespace std;
int sg[MAXN],vis[MAXN];
int init(){
    scanf("%d%d",&T,&f);
    for (int i=0;i
    for (int i=f;i<=MAXN-10;i++){
        int q=(int)ceil(sqrt(i));
        for (int j=1;j
            int a=j,b=j+1;
            int x=i/a, y=i-x*a;
            x-=y;
            now=sg[(x&1)*a]^sg[(y&1)*b];
            vis[now]=i;
            if (a%2 && x>=b){
                vis[now^sg[b]]=i;
            }
            if (a%2==0 && b*(y+a)<=i){
                vis[now^sg[a]]=i;
            }
        }
        for (int m=2;m<=q;m++){
            int a=i/m,b=a+1;
            int y=i-a*m,x=m-y;
            vis[sg[(x&1)*a]^sg[(y&1)*b]]=i;
        }
        for (int j=0;j<=MAXN-10;j++){
            if (vis[j]!=i){
                sg[i]=j;
                break;
            }
        }   
    }
    return 0;
}

int main()
{
    init();
    while (T--){
        scanf("%d",&n);
        ans=0;
        int x;
        for (int i=1;i<=n;i++){
            scanf("%d",&x);
            ans=ans^sg[x];
        }
        printf("%d%c",ans?1:0,T?' ':'\n');
    }
    return 0;
}

軟件標(biāo)簽: 試題

其他版本下載

發(fā)表評(píng)論

昵稱(chēng):
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
查看所有(0)條評(píng)論 > 字?jǐn)?shù): 0/500

TOP
軟件下載