• csp-s模拟测试86


    A. 异或

    上来先把除了2^k-1的部分分打满了,写的时候也一直不能集中精力,状态很迷,然后就进了T2

    最后10min回来写2^k-1,然后写着写着想出了正解。。。然后就没了。。。

    一般套路:按位考虑

    如果固定一个数x属于[L,R],然后统计出[L,R]内每位上1的个数就可以分类按位计算答案。

    发现不需要知道x具体是谁,我只需要知道所有的x(一起考虑)的01分布。

    假设考虑到第i位:

    1.当该位为1,能和该位为0的形成1<<i的贡献

    2.当该位为0,能和该位为1的形成1<<i贡献

    现在只要快速求出[L,R]内每位上1的个数。

    %mzz,发现每一位上的01是有循环节的,节长为1<<i+1

    求出R、L的前缀桶再相减。

    B. 取石子

    20分钟写完记搜就交了,也没有对拍,试了下极限数据跑的飞快,也没有从中发现问题。

    然后就爆零了,轻敌我活该。

     1 int dfs(int a,int b,int c)
     2 {
     3     if(~f[a][b][c])return f[a][b][c];
     4     if(!a&&!b&&!c)return 0;
     5     if(a&&b&&c){
     6         int lim=min(a,min(b,c));
     7         F(i,1,lim)if(!dfs(a-i,b-i,c-i))return f[a][b][c]=1;
     8     }
     9     if(a&&b&&!c){
    10         int lim=min(a,b);
    11         F(i,1,lim)if(!dfs(a-i,b-i,c))return f[a][b][c]=1;
    12     }
    13     if(a&&!b&&c){
    14         int lim=min(a,c);
    15         F(i,1,lim)if(!dfs(a-i,b,c-i))return f[a][b][c]=1;
    16     }
    17     if(!a&&b&&c){
    18         int lim=min(b,c);
    19         F(i,1,lim)if(!dfs(a,b-i,c-i))return f[a][b][c]=1;
    20     }
    21     if(a&&!b&&!c){
    22         F(i,1,a)if(!dfs(a-i,b,c))return f[a][b][c]=1;
    23     }
    24     if(!a&&b&&!c){
    25         F(i,1,b)if(!dfs(a,b-i,c))return f[a][b][c]=1;
    26     }
    27     if(!a&&!b&&c){
    28         F(i,1,c)if(!dfs(a,b,c-i))return f[a][b][c]=1;
    29     }
    30     return f[a][b][c]=0;
    31 }
    十分智障

    后面if进不去,脑抽。

    shu ru fa zha le orz

  • 相关阅读:
    708. Insert into a Cyclic Sorted List
    24. Swap Nodes in Pairs
    877. Stone Game
    EOJ Monthly 2020.7 A. 打字机(前缀和+思维)
    EOJ Monthly 2020.7 B. 线上考试(排列组合)
    【JavaScript】Generator
    【JavaScript】Promise
    【JavaScript】throw 和 try...catch
    【JavaScript】JSON
    【JavaScript】WeakSet
  • 原文地址:https://www.cnblogs.com/hzoi-yzh/p/11737325.html
Copyright © 2020-2023  润新知