首页 > 其他分享 >模拟赛25

模拟赛25

时间:2024-08-21 21:27:44浏览次数:9  
标签:25 最小 long 100000 ull using 模拟

模拟赛25

最近怎么狂挂不止。

  1. 博弈

    考虑策略,首先是优先最小的,但是由于有重复的,所以在最小个数为偶数时会败,以此类推,可以想到当有一个数出现次数时奇数先手必胜,否则必败。

    考虑将相同的两两相消,发现 \(u\to v\) 和 \(u\to 根\to v\) 是等价的。

    于是每个点维护一下当前的数,问题变成了求和当前集合相同的集合有几个,因为两两相消,可以异或 hash,也可用一些奇怪 hash。

    但是千万千万不要直接用 \(\sum a^n\),这个东西竟然是可以稳定被卡的!

  2. 跳跃

    发现其一定是在一个最大子段中反复横跳,然后在到下一个。

    数据比较水,错解轻松过(于是加了 hack)。

    hack 思路:

    首先是 \(k\) 取 \(min\) 的乱搞,这个轻松卡,就是 \(1,-100000,-100000,100000,100000\) 之类的用长段的负数让你一直在最前面跳,但其是可以到后面。

    这个在大数据随机下效果一般,不到 \(100\) 组就会出错,钦定第一个是 \(1\) 以后十几组就卡掉了。

    然后是一些假了的贪心,就是每次直接向最后一个可以跳到的地方跳,这个原理就是构造前后和的差距不大,但是从前面跳到后面会有较大代价导致不优,像 \(99999,100000,-100000,-100000,-100000,-99998,100000,100000\) 在 \(k\) 比较小的时候。

    这个在小数据随机下效果一般,\(n,k\le 20\) 时十几组就卡了(值域开大点),但是有人数据点分治但 \(n,k\le 20\) 的 dfs T 了没绷住。

    然后有一些逆天的 \(0\),比如 \(k=0\),有的要写特判。

    还有一些暴力会在恰好整除时错,懒得卡了,暴力一般也过不去。

    给一下数据生成器,多生成几组就有了
    #include<bits/stdc++.h>
    using namespace std;
    using llt=long long;
    using llf=long double;
    using ull=unsigned long long;
    #ifdef LOCAL
        FILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/in.in","w",stdout);
    #else
        FILE *InFile=stdin,*OutFile=stdout;
    #endif
    
    mt19937 rnd(ull(new char)*ull(new char));
    
    int main(){
        ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
        cout<<10<<endl;
        for(int t=1;t<=10;++t){
            int k=rnd()%10+1;
            if(k<=2){
                int n=901+rnd()%100,k=999999901+rnd()%100; cout<<n<<' '<<k<<endl;
                for(int i=1;i<=n;++i){
                    if(rnd()%5==0) cout<<0<<' '; 
                    else cout<<int(rnd()%200000)-100000<<' '; 
                }cout<<endl;
            }else if(k<=4){
                int n=901+rnd()%100,k=999999901+rnd()%100; cout<<n<<' '<<k<<endl;
                cout<<1<<' '; for(int i=2;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
            }else if(k<=6){
                int n=10+rnd()%10,k=10+rnd()%10; cout<<n<<' '<<k<<endl;
                for(int i=1;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
            }else if(k<=8){
                int n=rnd()%1000+1,k=rnd()%1000000000+1; cout<<n<<' '<<k<<endl;
                for(int i=1;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
            }else{
                int n=rnd()%1000+1; cout<<n<<' '<<0<<endl;
                for(int i=1;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
            }
        }
    }
    
  3. 大陆

    水题,建议改名:树分块前置。

    就是考虑维护子树中没有被选的,合并到父亲上,如果 \(\ge B\) 就单开一个,以父节点为省会。

    最后的根直接归到最后一个即可,可以证明其不超过 \(3B-1\)。

  4. 排列

    逆天题。

    其实思路很简单,就是直接维护 \(min\),\(max\),在子树是否存在三元组,二元组中最大的最小和最小的最大。

    因为只有在不存在三元组时要维护二元组,直接子树二分即可。

    代码长,但还算好写。

标签:25,最小,long,100000,ull,using,模拟
From: https://www.cnblogs.com/xrlong/p/18372593

相关文章

  • 『模拟赛』暑假集训CSP提高模拟26
    Rank打得一般,倒数第二场了。。A.博弈直接搬了牛客的一套题。一眼没思路,模了一会放弃直接去打T2了,后来把\(\mathcal{O(n^2)}\)暴力打了拿30pts。正解用到了异或哈希。首先确定合法的数量即为总对数\(\frac{n(n-1)}{2}\)减去不合法的数量,而比较显然的,不合法的判断......
  • 顺丰集团25届校招社招:网申求职入职综合能力Verify测评SHL题库、高分技巧
    ​ Q:顺丰入职在线测评是一定要做的吗?A:是的。简历初步评估通过后,我们将会推送测评至您网申时预留的个人邮箱,测评不通过或无成绩将无法推进后续流程,建议您在收到测评后的24小时内尽快完成。Q:为什么我没有收到顺丰入职测评?A:投递简历后未收到测评可能有以下原因,1)邮箱......
  • [赛记] 暑假集训CSP提高模拟24
    与和100pts签到题但还是做了很久。。。考虑与的条件,可以发现,如果将$a$转化成二进制,那么二进制上为$1$的位置$x$和$y$都必须是$1$,所以首先将$s$减去$2\timesa$,然后再判断一下$(s-2\timesa)\operatorname{and}a$是否为$0$即可;赛时用......
  • 2025秋招书籍推荐:《深度学习的数学理论》——揭示深度学习背后的数学逻辑
    近年来,随着深度学习在图像识别、自然语言处理等领域的突破性进展,越来越多的研究者和开发者投入到这个领域。然而,尽管深度学习在实践中取得了显著的成功,其背后的理论机制仍然让很多人感到迷惑。这就是为什么我今天想向大家推荐一本书——《深度学习的数学理论》(Mathematical......
  • 基于SpringBoot+Vue的实验室排课系统设计与实现(2025年毕业项目-源码+论文+部署讲解等)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.作者推荐项目12.为什么选择我?13.获取源......
  • 基于Java的志愿者管理系统设计与实现(适用于2025年毕业项目-源码+论文+部署讲解等)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.作者推荐项目12.为什么选择我?13.获取源......
  • 暑假集训CSP提高模拟26
    赛时rank17,T118,T250,T30,T440博弈异或hash。当crying必胜时,一定为有一个权值出现次数为奇数,证明是显然的。然后就可以考虑异或了。将每个相同的权值换成一个很大的随机权值,然后在树上异或。两个点之间的路径为\(dist_x\oplusdist_y\oplusdist_{lca}\oplusdist_{lc......
  • 25:Python文件操作
    #文件,读取#f.flush()将文件内容从内存刷到硬盘#f.closed文件如果关闭则返回True#f.encoding查看使用open打开文件的编码#f.tell()查看文件处理当前的光标位置#f.seek(3)从开头开始数,将光标移动到第三个字节#f.truncate(10)从开头开始算,将文件只保留从0-10个......
  • 北京劳保展-2025年中国劳动保护用品展览交易会-参展报名处
    2025北京劳保展,作为行业的重要交流平台,将为您提供无限商机。这里有最前沿的劳保理念,最先进的防护设备,最广泛的合作机会。无论您是劳保用品的制造商、经销商,还是致力于提升劳动保护水平的专业人士,这里都有您的一席之地。  2025北京劳保展,将为您呈现最全面的劳保产品,最先进的......
  • 【C语言入门】如何使用动态内存分配来模拟“大小未知”的数组
    如何使用动态内存分配来模拟“大小未知”的数组引子举例应用结语引子在C语言中,定义一个“大小未知”的数组直接是不可行的,因为数组在声明时必须有确定的大小,要么是在编译时确定的常量表达式,要么是在C99或更高标准下,允许运行时确定大小的变长数组(VLA)。变长数组(Varia......