在今天的模拟赛中,部分同学由于对出现某个数在模 \(1000000007\) 意义下为 \(0\) 的情况不规范被 Hack。

Hack 原理:开始时有 \(2\) 个 \(1\),先都加到 \(1000000001\),然后一个一个加 \(8\) 次虽然加 \(7\) 次足以 Hack,这个时候如果对 \(1000000007\) 处理不好,可能后面都变成 \(0\)。

我的方案:考虑两个性质(按照题解):

  1. \(2\) 操作到 \(1000000007\) 的倍数(分子为 \(0\))只可能是 \(1000000007\),也就是说每个位置至多出现一次分子或分母为 \(0\)。
  2. 分母为 \(0\) 的上一步同样位置的 \(2\) 操作中一定分子为 \(0\),因为分母为 \(0\) 时必定出过 \(a_i=1000000007\)。(我可能给之前的同学解释错了,因为可能出现 \(3\) 操作使得分子分母为 \(0\) 的 \(2\) 操作之间夹着几个,但也无伤大雅,这里致以诚挚歉意)。

综上所述,考虑记录每个位置上一次的分子为 \(0\) 位置,维护一个指针指向当前更新到的点。遇到分子为 \(0\) 的值,停止维护,输出答案一定为 \(0\)。遇到分母为 \(0\),找到对应分子为 \(0\) 的位置,合并两个分数:将后者的分子赋给前者,后者置为 \(1\),这样保证后面的值都是对的。指针继续往下跳转,直到遇到下一个分子为 \(0\) 的数。

以 Hack 数据为例,最后几个数为 \(\frac{0}{1000000006},\frac{0}{1000000006},\frac{1}{0},\frac{1}{0}\cdots\),位置分别在 \(1,2,1,2\cdots\),扫到第一、二个数停止更新,输出 \(0\)。扫到第三个数,将第一个数变成 \(\frac{1}{1000000006}\),第三个数变为 \(1\),往下更新到第二个数处。扫到第四个数,同理更新,此时可以更新到第四个数。

upd:好像还把精度卡了,PEP \(10^{-15}\) 的 eps 没过....我的代码用的分数类。

附:数据,我的代码

Hack 说明的更多相关文章

  1. css常用hack

    原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...

  2. CSS3_01之选择器、Hack

    1.兄弟选择器:①相邻兄弟选择器:元素的后一个兄弟元素,选择器1+选择器2:②通用兄弟选择器:元素后的所有兄弟元素,选择器1~选择器2: 2.属性选择器:attr表示属性名称,elem表示元素名:①[ ...

  3. CSS Hack技术介绍及常用的Hack技巧集锦

    一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致相同的CSS输出的页面效果不同,这就需要CSS Hack来解决浏览器局部的兼容性问题.而这个针对不同的浏览器写不同的CS ...

  4. Medial Queries的另一用法——实现IE hack

    众所周知,有些时候为了实现IE下的某些效果与现代浏览器一致,我们不得不使用一些hack手段来实现目的.比如说使用"\0","\"和"\9"来 ...

  5. CSS Hack

    CSS HACK,网上有很多,主要是IE版本不同造成的,尽量不要用CSS HACK,实在调不过去可以用一用,相信以后随着IE低版本的淘汰,CSS HACK也将不在使用. 类内部HACK IE6识别 - ...

  6. hack

    1.Firefox @-moz-document url-prefix() { .selector { property: value; } }上面是仅仅被Firefox浏览器识别的写法,具体如: @ ...

  7. 浅谈CSS hack(浏览器兼容)

    今天简单写一点关于浏览器兼容的处理方法,虽然百度上已经有很多,但是我还是要写! 先看一个图 这个图描述了2016年1月至8月网民们所使用的浏览器市场份额(来源:http://tongji.baidu. ...

  8. css3复杂选择器+内容生成+Css Hack

    1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...

  9. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

  10. CSS hack技巧大全

    ——作者:吴雷君 兼容范围: IE:6.0+,FireFox:2.0+,Opera 10.0+,Sarari 3.0+,Chrome 参考资料: 各游览器常用兼容标记一览表: 标记 IE6 IE7 I ...

随机推荐

  1. BUUCTF---天干地址+甲子

    题目 直接参考天干地支表作结,转ASCII flag{Goodjob}

  2. 【Java】基本语法

    一.语言概述 整体语言概述 (一)Java语言概述 1.基础常识 软件:即一系列按照特定顺序组织的计算机数据和指令的集合.分为:系统软件 和 应用软件 系统软件:windows , mac os , ...

  3. 【Linux】3.2 vi和vim编辑器

    vi 和 vim 三种模式的相互转化图 vim 和 vi 的快捷键键盘一览图 vi和vim编辑器 1. vi和vim的基本介绍 所有Linux系统都会内置vi文本编辑器 vim是vi的升级版,可以主动 ...

  4. 基于Docker+DeepSeek+Dify:搭建企业级本地私有化知识库超详细教程

    在当今信息爆炸的时代,如何高效地管理和利用知识成为了企业竞争力的关键.为了帮助企业构建专属的知识库,本文将详细介绍如何使用Docker.DeepSeek和Dify来搭建一个企业级本地私有化知识库. 1 ...

  5. 🎯Vercel-从零到上线的云端部署神器

    简介 Vercel是一个专注于前端和全栈应用部署的云端平台,由Zeit公司开发.它以零配置部署.全球CDN加速和对主流框架的深度支持为核心优势,成为开发者快速上线项目的首选工具.无论是个人博客.企业官 ...

  6. Java日期格式化中的“YYYY”陷阱:为什么跨年周会让你的年份突然+1?.md

    结论先行 在Java中使用 YYYY-MM-dd 格式化日期时,若日期所在的周跨年,年份可能会被错误计算为下一年(如2021年12月26日显示为2022年).而使用 yyyy-MM-dd 会始终返回正 ...

  7. 毒瘤idea合集

    给定 \(n,m\) ,求: \[\sum_{i=1}^{n}\sum_{i=1}^{m}max\big(gcd(i,j)^i,lcm(i,j)^j\big) \]

  8. 工具 | burpgpt

    0x00 简介 burpgpt是一款利用AI来检测安全漏洞的burpsuite插件.Burp Suite GPT扩展集成了OpenAI的GPT,以执行额外的被动扫描以发现高度定制的漏洞,并支持运行任何 ...

  9. 操作系统:Linux如何实现进程与进程调度

    Linux如何表示进程 在Cosmos中,设计了一个thread_t数据结构来代表一个进程,Linux也同样是用一个数据结构表示进程. Linux进程的数据结构 在Linux系统下,把运行中的应用程序 ...

  10. K8s新手系列之DaemonSet资源

    概述 官网文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/daemonset/ DaemonSet简称ds Dae ...