其实这道题的主体并不难,主要是细节很多


我们可以把题目分成界限分明的两部分,第一部分,屠每条龙所用的剑只和当前拥有的剑有关。于是可以单独开一个数据结构按题目维护。

另一部分找到最小攻击次数,可以化作以下式子:

\(atk \cdot x \equiv a[i](mod\;p[i])\)

这时我们便能明白题目中所有宝剑攻击力均为1的部分分的含义。因为此时就是标准的exkmp模板。

所以我们要解决的就是x带系数的一元同余方程组。

思考excrt的步骤:

设 \(m = gcd(p_1,p_2...,p_{i-1})\),x满足前i-1个同余方程,则满足前i个方程的解必须为 \(x+tm\) 的形式(t为常数)

那么实际上方程为:\(x+tm \equiv a_i(mod\;p_i)\)

既然x为定值,那么可以把x移动到右边,使方程变为\(tm \equiv a_i-x(mod\;p_i)\)

于是可以化为:\(tm+pa_i=b_i-x\)。即一个以t,p为未知数的二元一次不定方程。然后用扩展欧几里得求解。

发现实际上,当x带系数 atk 时最后一个不定方程可以转化为:

\(tm\cdot atk+pai=b_i-atk\cdot x\)

其实也就是把 \(x+tm\)变成了\(atk(x+tm)\)。

这同样是一个同余方程,所以同样可以用扩欧求解

但要注意几个小问题:

  1. 不同于一般的excrt第一个方程直接赋值解决,这里第一个方程也需要做一次扩欧,所以和后面一起循环就好。

  2. excrt 模板一样,在进行乘法时,也需要__int128或龟速乘帮忙。

  3. 注意题目中必须要砍到龙血量为非正数才能杀死龙,所以当最终答案不足以杀死血最厚的龙时需要不断地加上所有攻击的最小公倍数(为什么是最小公倍数?原因和设m的原因相同)。

  4. 为什么excrtatk要用代码块?因为不这样会有烦人的语法检查

P4774 倚天屠龙传 题解的更多相关文章

  1. Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 178  Solved: 70[Submit][Stat ...

  2. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status ...

  3. 【数论·错位排列】bzoj4517 排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1428  Solved: 872[Submit][Statu ...

  4. bzoj 4723 [POI2017]Flappy Bird 模拟

    [POI2017]Flappy Bird Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 482  Solved: 196[Submit][Status ...

  5. 3993: [SDOI2015]星际战争

    3993: [SDOI2015]星际战争 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1244  Solved: ...

  6. 【BZOJ 4151 The Cave】

    Time Limit: 5 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 293  Solved: 144[Submit][Status][Di ...

  7. bzoj 4897 天赋 有向图的矩阵数定理

    4894: 天赋 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 104  Solved: 80[Submit][Status][Discuss] De ...

  8. bzoj3874&2832 [Ahoi2014]宅男计划 模拟退火,三分

    [Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 962  Solved: 371[Submit][ ...

  9. bzoj3609 [Heoi2014]人人尽说江南好 博弈

    [Heoi2014]人人尽说江南好 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 581  Solved: 420[Submit][Status][D ...

  10. [Bzoj3611][Heoi2014]大工程(虚树)

    3611: [Heoi2014]大工程 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 2000  Solved: 837[Submit][Status ...

随机推荐

  1. 实验:STM32F103烧写支持Arduino

    1.搭建烧写环境 烧写器:ST-LINK.  2.启动stm32 flash烧写工具  3.连接识别CPU 4.打开generic-boot20_pc13.bin 5.烧写程序  6.查上miniUS ...

  2. matlab读写文件

    dsp,fpga这些产生的文件大部分都是二进制存储的,知道格式后可以直接读取. 读取后的"可懂"数据如何以"可懂"的形式保存在.dat,.txt,.csv之类文 ...

  3. 基于Python接口自动化测试持续集成----在jenkins创建任务->检出git的代码-->生成报告-->发送邮件

    步骤一:先在jenkins创建一个自由风格的任务 步骤二:然后在源码管理选择git检出代码的方式,需要提供代码所在git的路径和登录git的账号和密码 步骤三:返回到任务配置的界面,先在构建后操作增加 ...

  4. linux资源查看与监控命令

  5. android studio真垃圾

    开发人员写代码就行了,想用你写代码,安装配置费死个劲! 我不是针对你,除了visual studio ,所有的IDE都是垃圾.

  6. c++ 保存txt文件

    #include <iostream> #include <stdio.h> #include <fstream> #include <queue> # ...

  7. Verilog语法+:的说明

    "+:"."-:"语法看到这个语法的时候是在分析AXI lite 总线源码时碰见的,然后查阅了资料,做出如下解释. 1.用处这两个应该算是运算符,运用在多位的变 ...

  8. 使用idea从零编写SpringCloud项目-Ribbo

    git:https://github.com/bmdcheng/product_server git:https://github.com/bmdcheng/order_server 1.需要创建两个 ...

  9. Ubuntu-18.04.1-live-server-amd64.iso安装全过程

    以下向你介绍安装Ubuntu-18.04.1-live-server-amd64.iso版本的全过程,同时要说明的是Ubuntu 18.04.1 server版本只能通过文本的方式安装,即它没有和Ub ...

  10. Modelsim中的Verilog语言使用

    一.建立工程 1.在建立工程(project)前,先建立一个工作库(library),一般将这个 library 命名为 work.尤其是第一次运行 modelsim 时,是没有这个"wor ...