zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    linux 磁盘管理学习笔记
    Apache的Order Allow Deny心得
    NodeJs 笔记
    JavaScript 笔记
    MySQL 学习笔记
    HTML 转义符
    UTF-8 BOM(EF BB BF)
    [ Python
    [ Python
    [ Python
  • 原文地址:https://www.cnblogs.com/hzoi-yzh/p/11737325.html
Copyright © 2011-2022 走看看