期末周的第二把网瘾,vp了一把abc。这把打得还是比较舒服的,做出了A~E。但最后两道题还是出得太慢了(一道思路太慢,一道调试太慢)。什么时候能够在赛时做出F题呢qwq...

ABC

这场abc的ABC题还是很白给的,就不再赘述了。

D

前缀后缀和 + 二分

题意是给定一个循环数组和定值\(sum\),问是否存在一个子数组,使得总和恰为\(sum\)

这个子数组的形式只有两种情况:

  1. 原数组的某个子区间
  2. 原数组某个后缀 + 若干个整个数组 + 原数组某个前缀 拼接而成

对于情况1,采用枚举右端点,二分左端点的传统套路

对于情况2,设后缀和为\(suf\),前缀和为\(pre\) , 则有:

pre + k * S + suf == sum

其中\(S\)为整个数组的所有元素和

暴力枚举\(pre\)和\(suf\)的复杂度是\(O(n^2)\)的,考虑优化:

枚举\(suf\),由于\(pre\) \(<=\) \(S\) , 因此可以将这个式子中的\(pre\)看做余数,\(k\)看做商。则一定有 : \((sum - suf)\) % \(S\) == \(pre\) 。这样问题就转化为找一个和为\((sum - suf)\) % \(S\)的前缀。直接二分找即可,类似情况1。

两种情况的复杂度均为\(O(nlogn)\)

刚开始时看这道题就有了这个思路,但到比赛快结束时才AC。还是太菜了。。。

code

E

优先队列版bfs

思路一点都不难想,就是每次扩展时选择可以扩展的所有位置中最小的那个数就行。

因为每一次对于当前可以选择的所有数,选择了某个数时,只会扩大选择范围,而原来可以选择的那些数都仍然可以被选。而越小的数越可以选择。顺着这样的思路,很容易想到每次贪心取最小就是正解。

实现也很简单,直接队列改为小根堆再\(bfs\)就行了。

不过赛时此题WA了三发。debug了半天最后才发现是地图中的数据也会爆\(long long\),而地图的数据类型一直都是\(int\)(悲。。

code

F

数学题。赛后看完官方题解后思路逐渐清晰,最后自己补出来了。

题意就是给一个数组,求出数组中每一对 \((A_i , A_j)\) 之和并除去其中所有的因子2 的总和,注意\((A_i , A_i)\)也算一对数

由于最大值\(A_i + A_j\) \(<=\) \(2 * 10^7\) , 故除以\(2^k\)的\(k\)很小,不会超过\(26\).因此考虑找到 对于一个特定的\(k\) , 恰好含有\(k\)个因子\(2\)的所有\(A_i + A_j\) , 并设它们的总和为\(res[k]\)。

则:

 ans = Σ (res[k] / 2^k) , k = 0,1,2 …… 25

\(res[k]\)可以利用前缀和的思想来计算:

设\(sum[k]\):所有能被\(2^k\)整除的\(A_i + A_j\)的总和

则恰好含有k个因子2 的\(A_i + A_j\)的总和\(res[k]\)为 :

 res[k] = sum[k] - sum[k + 1]

现在考虑计算所有的\(sum[k]\):

暴力即直接\(O(n^2)\)找每一对数的和,并判断是否为\(2^k\)的倍数即可。优化可以利用余数的性质来优化:

  • 对于任意两个数\(x,y\),它们除以\(2^k\)的余数为\(r_x,r_y\)。若二者的和是\(2^k\)的倍数,则一定是以下两种情况之一:

    1. \(r_x,r_y\)均为0
    2. \(r_x + r_y = 2^k\)

因此可以考虑\(O(n)\)遍历数组,用\(map\)记录所有数除以\(2^k\)后得到的余数\(r\)的 个数 和 对应原数的总和 。

对于某个余数\(r\),它可以和余数为\(2^k - r\)的信息配对(相加后一定是\(2^k\)的倍数)。直接数学计算出它们产生的贡献即可,最后把所有贡献累加起来。

注意当余数为\(0\)或\(2^{k-1}\)时需要特判,因为要找的对应余数的信息就是本身。

code

G

G看官方题解是个分块,不太会qwq...那就补到这里吧。

ABC 384(A~F)的更多相关文章

  1. UltraEdit (Ctrl + F) 查找、(Ctrl + R)替换功能失效

    环境: Windows 7 Service Pack 1 X64 工具: UltraEdit Version 21 症状: UltraEdit (Ctrl + F) 查找.(Ctrl + R)替换功能 ...

  2. 对C标准中空白字符(空格、回车符(\r)、换行符(\n)、水平制表符(\t)、垂直制表符(\v)、换页符(\f))的理解

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   C标准库里<ctype.h>中声明了一个函数: int isspace(int c); 该函数判断字符c是否 ...

  3. Ubuntu+Fedora进阶学习,指令迅速查询,Bug迅速查询(Ctrl+F)

    There is some notes while I am learning Ubuntu Operate System! (Ask Ubuntu & Fedora) 1-- Hard li ...

  4. eclipse 格式化快捷键(Ctrl+shift+f)不起作用的解决办法

    eclipse格式化快界面Ctrl+Shift+f不起作用一般是键位冲突所导致的,一般是搜狗输入法的“繁体与简体”中文切换快界面冲突. 把它禁用掉就可以了. 下面是禁用步骤: 点击sougou输入法右 ...

  5. 小学生二元四则运算(F)

      整体功能简介: 1.题目不重复: 2.可以定制数量: 3.可以自己选择输入范围: 4.可以选择是否添加乘除法: 5.可以选择除法结果是取整或商加余数形式表示或小数方式(默认小数点后两位)表示: 6 ...

  6. 【AtCoder】ARC097 (C - F)题解

    C - K-th Substring 题解 找出第K大的子串,重复的不计入 这个数据范围可能有什么暴力可以艹过去吧,但是K放大的话这就是后缀自动机板子题啊= = 代码 #include <ios ...

  7. Java面向对象1(A~F)

    QWQ请假一节课,错过一章内容,只能求助qsh了. C/C++训练1---最大公约数与最小公倍数(SDUT 1131) import java.util.*; class Number { int a ...

  8. The Preliminary Contest for ICPC Asia Nanjing 2019( B H F)

    B. super_log 题意:研究一下就是求幂塔函数 %m的值. 思路:扩展欧拉降幂. AC代码: #include<bits/stdc++.h> using namespace std ...

  9. Forest Program(2019ccpc秦皇岛F)

    题:http://acm.hdu.edu.cn/showproblem.php?pid=6736 题意:删掉一些边使得图不存在点双,求方案数. 分析:若一条边不属于点双,那么这条边有删和不删俩种选择, ...

  10. 格式化代码(Eclipse 格式化代码块快捷键:Ctrl+Shift+F)

    1.格式化java代码 : ①Ctrl+Shift+F 但是我们会遇到按 Ctrl+Shift+F不起作用的时候?       Ctrl+Shift+F 在搜狗拼音里是简繁替换.一旦安装搜狗拼音这个快 ...

随机推荐

  1. 题解:CF888G Xor-MST

    题解:CF888G Xor-MST 题目大意:给定 \(n\) 个点的点权, 任意两点间边权是点权的异或和.求这张完全图的 MST 的权值. 思路: Boruvka + Trie树 + 按位贪心. 关 ...

  2. 干货分享:Air780E开发板如何使用?

    ​ 一.概述 CORE-AIR780E 开发板是合宙通信推出的基于 Air780E 模组所开发的,包含电源,SIM 卡,USB,天线,音频等必要功能的最小硬件系统.以方便用户在设计前期对 Air780 ...

  3. Slate文档编辑器-WrapNode数据结构与操作变换

    Slate文档编辑器-WrapNode数据结构与操作变换 在之前我们聊到了一些关于slate富文本引擎的基本概念,并且对基于slate实现文档编辑器的一些插件化能力设计.类型拓展.具体方案等作了探讨, ...

  4. JVM最简生存指南

    本文由 ImportNew - Grey 翻译自 hadihariri.欢迎加入Java小组.转载请参见文章末尾的要求. 最近更新 : 2014年1月9日 为什么要写这个指南 持续更新 目标人群 基础 ...

  5. vue2-路由Router

    ​ Vue 中的路由用于实现单页应用(SPA)中的页面导航.它允许你在不刷新整个页面的情况下,根据不同的 URL 路径显示不同的组件,提供了类似于多页面应用的用户体验.例如,在一个电商应用中,可以通过 ...

  6. ZCMU-1101

    这个题不怎么难,就是当时没有理解到字典序的意思:我一直以为是自己元素间的比较,后再同学帮助下明白这里是与其他比,这样就很简单了.就是要求当前那个最小就可以了. 对这道题我有点吐槽明明自己都说了最后一组 ...

  7. 构造SLR语法分析表

    构造SLR语法分析表 方法: 1)构造G'的规范LR(0)项集族 2)根据规则生成动作 3)生成转换 4)设置报错 /** * P157 规范LR(0)项集族 * @param grammar */ ...

  8. 获取Map中选择的要素

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  9. window.open打开网址被拦截

    window.open打开网址被拦截 标签: js 坑位 通过window.open打开一个网址,在火狐和IE系列浏览器下会拦截掉,除非用户主动点击允许才会成功,这样用户体验基本是恶心到产品的,而产品 ...

  10. ruoyi若依前端验证码不显示的终极解决方法-20230721

    ​搞了3天啊,查了各种资料啊. 然后使劲的看log啊,总算搞定了啊. 一般情况,本地开发环境测试没问题,部署到服务器就各种不适应,就是服务器配置的问题了. 本次这种验证码不显示,典型的nginx的配置 ...