首页 > 其他分享 >9.27 模拟赛(NOIP十三连测 #10)

9.27 模拟赛(NOIP十三连测 #10)

时间:2024-09-27 19:44:42浏览次数:1  
标签:10 le 9.27 NOIP 所以 T2 差分 mathcal

2024--梦熊&太戈--NOIP十三连测 #10【订正】 - 比赛 - 梦熊联盟 (mna.wang)

复盘

开 T1。差分转化。模拟了一下样例感觉方案好像是唯一确定的,不需要贪心/DP。但不太能证。

想了会感觉找不出反例。然后写完了。对拍没挂。用时不到 \(30\) 分钟。

T2。\(m \le 20\) 且数据随机感觉很好做的样子。

发现不会正解,但是有 \(50\) 的部分分很快想出来了。先写 \(50\)。

T2 正解先放,看 T3。

数位 DP?好像不是。想到了 ABC363D,但好像没关系。

没关系吗?我可以通过 ABC363D 的方法,处理出所有 \(<n\) 的回文数,总共 \(\sqrt n\) 个,然后双指针(其实全存下来再双指针,直接做差判断另一个是否回文即可)。能过 \(n \le 10^{12}\) 的 \(50\) 分!写!

然后对拍没挂。尝试卡常通过 \(n \le 10^{16}\) 的 \(70\) 分但失败了。

开 T4。不是第二档部分分直接按题意模拟啊,这种红题难度的部分分给了 \(30\)??

第一档倍增也会。有 \(60\) 了。正确性显然所以没对拍。

\(260\) 了。冲 T2 正解。

我好像忘了数据随机。于是加了一些针对随机优化。一个比较重要的是将前面的数去重。然后跑自己造的 \(n = 10^6,m=20\) 的随机数据。

1.6s。

不是啊????????????我是不是过了。

显然没过。最终 \(100+50+60+60=270\)。T3 \(n \le 10^{16}\) 多过了一个点。没离谱挂分就是胜利!

其实 T2 只要再加一个优化就过了。但我好像想到了(?)但是感觉不太好写(?)所以没写。

总结

好的:

  • 想出了 T1。
  • 没挂分。

不足:

  • 不会乱搞。

题解

A. 小 C 玩扑克

注意到区间 \([i, r_i]\) 最多只会反转 \(1\) 次。

区间反转可以差分转化,然后变成单点修改 \(i\) 或 \(r_i + 1\),直到差分序列全变成 \(0\)。令差分序列为 \(b\)。

注意到每个区间是否需要反转是唯一确定的。考虑归纳证明。

对于 \(j\),我们希望让 \(b_j\) 最终变成 \(0\),也就是说如果 \(b_j\) 原来是 \(1\) 的话,需要执行奇数次与 \(j\) 有关的操作(与 \(j\) 有关指对 \(i = j\) 或 \(i = r_j + 1\) 进行操作)。如果 \(b_j\) 原来是 \(0\) 则偶数。

我们考虑所有满足 \(r_i + 1 = j\) 的 \(i\)。因为 \(i \le r_i\) 所以这些区间是否反转已经确定了,且我们假设到现在都没出现过问题。

求出这些 \(i\) 中有多少个反转过。如果这个数量的奇偶性与 \(b_j\) 不相同,那么 \(i = j\) 的操作必须进行一遍。

所以我们就唯一确定了每个区间是否反转。所以输入的 \(t_i\) 是诈骗,只在算答案的时候用了。

B. 小 C 写代码

显然这不是个贪心/DP题。我们只需要算每一行的最小代价,加和即可。

两种做法。

暴力+优化

代码比文字好理解。复杂度是 \(\mathcal O(n 2^{2m})\),但是数据随机所以非常快(0.3s)。

bool st[2 * N];
vector<int> v[N];

int solve() {
    for (int i = 0; i < 1 << m; ++ i )
        v[ppc(i)].push_back(i);

    int res = 0;

    for (int i = 1; i <= n; ++ i ) {
        int x = 0;

        for (int j = 0; j < m; ++ j ) {
            char c = getchar();
            while (c != '1' && c != '0') c = getchar(); 
            x = x * 2 + c - '0';
        }

        if (st[x]) res ++ ;
        else {
            int p = c;
            for (int j = 0; j <= m; ++ j )
                for (int k : v[j])
                    if (st[x ^ k]) {
                        p = min(p, j + 1);
                        break;
                    }
            st[x] = true;
            res += p;
        }
    }

    return res;
}

正解

令 \(f(S)\) 表示通过当前已经编写的代码,变成 \(S\) 的最小代价。初始 \(f(S) = c\),即第一种编写代码方式。

我们要支持对 \(f\) 进行操作:

  • 查某个特定的 \(f(S)\);
  • 编写一行新的代码,并修改所有 \(f(S)\)。

注意到 \(f(S) \le m\)。所以第二种操作里,所有 \(f(S)\) 最多只会总共变化 \(\mathcal O(m2^m)\) 次

考虑搜索。类似 SPFA,只有当 \(S\) 的 \(f\) 变优时进行松弛,若没变优直接停止搜索。

所以复杂度是 \(\mathcal O(m^22^m)\)。因为每个状态修改一个点后能得到 \(m\) 个不同的,所以又多了一个 \(m\)。

提交记录 #633164 - 梦熊联盟 (mna.wang)

C. 对称数之和

考虑 \(\mathcal O(2^{\log_{10}n})\) 枚举每一位是否进位,处理出 \(m_i\) 表示最终的 \(a, b\) 需要满足 \(a,b\) 的第 \(i\) 位和为 \(m_i\)。这里因为已经考虑好进位了所以有可能 \(m_i \ge 10\)。

分类讨论:

  • 如果 \(a, b\) 位数相同:

    • 如果 \(m\) 不回文那么答案是 \(0\)。

    • 否则,每个对应位单独计算贡献,乘法原理即可。

      具体的,如果这一位两个数的和是 \(m_i\),那么:

      • 如果 \(m_i \le 9\):方案数是 \(m_i + 1\)。因为 \(a_i\) 可以取 \(0 \sim m_i\)。
      • 如果 \(m_i > 10\):方案数是 \(9-(m_i-9)+1=19-m_i\)。因为 \(a_i\) 可以取 \(m_i - 9 \sim 9\)。
  • 如果 \(a, b\) 位数不同:

    \(a, b\) 中必有一个与 \(m\) 有相同位数。不妨设为 \(a\),最后将方案数乘 \(2\)。

    枚举 \(b\) 的位数(\(1 \sim m_i - 1\))。满足如上条件的 \(a, b\)在至多只有一个。因为如果存在那么必定是这种形式:

    这是一个例子。其实就是通过做差和回文转移得到的。

    得到这个后判断一遍是否所有条件都合法即可。

标签:10,le,9.27,NOIP,所以,T2,差分,mathcal
From: https://www.cnblogs.com/2huk/p/18436446

相关文章

  • 骨传导耳机品牌排行榜分享:360度实测分析10款抢手骨传导耳机!
    随着科技的不断进步和人们生活方式的变化,骨传导耳机以其独特的传声方式和开放式设计,逐渐成为运动爱好者、户外活动家以及听力障碍人士的新宠。不同于传统耳机将声音直接导入耳道,骨传导耳机通过振动颅骨将声音传递至内耳,不仅能够保护听力,还能在享受音乐的同时保持对外界环境的感......
  • 《华为云DTSE》期刊免费下载:10个案例读懂云上架构升级策略
    本文分享自华为云社区《《华为云DTSE》期刊第四期赋能云专刊,赋能云场景下DTSE服务各类开发者的案例分享》,作者:HuaweiCloudDeveloper。 把公司的开发者平台统一在一起,是华为云所担负的任务,其最终目的是要汇聚开发者、做厚“黑土地”,支撑三大根生态的发展壮大。这也意味着,作为支......
  • 广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
    ​ 【题目描述】已知nn个整数x1,x2,……xn以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别得到一系列的和。例如当n=4, k=34个整数分别为3,7,12,193,7,12,19时,可得全部的组合与它们的和为:3+7+12=223+7+19=297+12+19=383+12+19=34现在,要求你计......
  • VMware安装Ubuntu操作系统 2024.9.27
    1.安装Ubuntu的官方网站是:https://www.ubuntu.com/download点进去可以直接下载文件下载会比较慢,我这点用了约5分钟然后就可以打开vmware,选择:就可以注册和使用了。笔记本电脑是这样的。。如果使用台式机,没有相应的硬件环境的话,就不要创建空的盘符了,就可以创建和导入镜像文......
  • GitHub每日最火火火项目(9.27)
    项目名称:localsend/localsend项目介绍:“localsend/localsend”是一个极具价值的开源项目。它为用户提供了一种跨平台的文件传输替代方案,可媲美AirDrop。在当今数字化时代,人们常常需要在不同操作系统的设备之间传输文件,但并非所有设备都能使用AirDrop。这个项目的出......
  • NOIP2024模拟测试赛(一)
    比赛链接A.tree当\(\forallv_i\le1\)时,可以直接从下往上贪心选,一个以\(u\)为根的子树中联通块如果权值和\(>k\)那么肯定能删到恰好\(k\)。否则的话就把这个联通块并到\(u\)父亲上再看就行。当\(\forallv_i\le2\)时,直接贪心可能有问题,大于\(k\)的权值和可能......
  • KylinV10麒麟系统使用Nexus搭建YUM仓库代理
    安装Nexus(docker版本,宿主主机是啥系统无所谓)安装Nexus的服务器必须要有网,如果没网的话,前面还需要搭建NGINX反向代理下载镜像root@ubuntu:/#dockerpullsonatype/nexus3:3.38.1创建目录root@ubuntu:~#mkdir-p/data/nexus3/dataroot@ubuntu:~#chmod777/data/nexus3/启动镜像......
  • 10个高效的Python爬虫框架
    ​前言小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!Scrapyscrapy官网:https://scrapy.org/scrapy中文文档:https://www.osgeo.cn/scrapy/intro/oScrapy......
  • 【题解】【归并排序】—— [NOIP2011 普及组] 瑞士轮
    【题解】【归并排序】——[NOIP2011普及组]瑞士轮[NOIP2011普及组]瑞士轮题目背景题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.思路解析2.AC代码[NOIP2011普及组]瑞士轮通往洛谷的传送门题目背景在双人对决的竞技性比赛,如乒乓球、羽毛球、......
  • P10603 BZOJ4372 烁烁的游戏 题解
    题目传送门前置知识动态树分治|动态开点线段树|标记永久化解法考虑动态点分治。两种操作本质上是将luoguP6329【模板】点分树|震波的操作互换了下,将原需支持单点修改、区间查询的数据结构换成需支持区间修改、单点查询的数据结构即可。区间修改、单点查询的动态开......