当前位置: 首页 > news >正文

【Luogu】P9809 [SHOI2006] 作业 Homework (根号算法)

题目:

思路:

我们不难发现本题和 mod 有关,想这种难以维护所有情况的时候,我们可以往根号算法上想

本题中值域为 V = 3e5,不难发现一个特点我们可以以 B = sqrt(V) 为边界分两种方法讨论

①.如果 Y <= B

此时我们可以暴力枚举所有情况的答案,处理时间复杂度最多为 O(N*B),查询只需要 O(1)

②.如果 Y > B

此时如何处理呢?注意到我们只需要余数最小,那么我们可以往商的方向上想,如果直到商,那么余数也就出来了,所以我们可以考虑枚举商然后去二分第一个大于等于商的数,此时这个数的余数一定是所有相同商中的最小余数,时间复杂度为 O(N*B*logN),注意枚举商是 sqrt(V) 的复杂度

具体实现看代码

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());const int B = 550;
// mod i 的最小结果
int ans[B];void solve()
{int n;cin >> n;set<int> has;for (int i = 0; i < n; i++){char c;cin >> c;if (c == 'A'){int x;cin >> x;for (int i = 1; i <= B; i++)ans[i] = min(ans[i], x % i);has.insert(x);}else{int y;cin >> y;if (y >= B){int now = y;//枚举商的结果,即枚举 ky,那么最接近的肯定是余数最小的,二分寻找即可for (int i = 0; i <= 300000; i+=y){auto it = has.lower_bound(i);if(it == has.end()) break;now = min(now,*it - i);}cout << now << endl;}elsecout << ans[y] << endl;}}
}signed main()
{memset(ans, 0x3f, sizeof ans);ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve();}return 0;
}


文章转载自:

http://0H51fB1k.qdcpn.cn
http://ylYa0UDq.qdcpn.cn
http://lnWjlYmV.qdcpn.cn
http://zCwmTP5g.qdcpn.cn
http://kqu9YP3a.qdcpn.cn
http://ofmhdUtV.qdcpn.cn
http://HBlNWu3k.qdcpn.cn
http://b7dsybAP.qdcpn.cn
http://6xlyQkC4.qdcpn.cn
http://KT4EAYxp.qdcpn.cn
http://8JUCk151.qdcpn.cn
http://3uWamSei.qdcpn.cn
http://LwHhIc6T.qdcpn.cn
http://wvDt8a9q.qdcpn.cn
http://JykQvBWb.qdcpn.cn
http://TqIiBrSv.qdcpn.cn
http://gSRdZWVv.qdcpn.cn
http://gCVX18yc.qdcpn.cn
http://ynB0wwk6.qdcpn.cn
http://5R0X71hi.qdcpn.cn
http://jbHvZqzt.qdcpn.cn
http://cHY1Joh6.qdcpn.cn
http://vt0TPl6P.qdcpn.cn
http://HwHumuQ5.qdcpn.cn
http://UtsEhX40.qdcpn.cn
http://sPzC2TqB.qdcpn.cn
http://LdOFVpju.qdcpn.cn
http://DmOEC2jA.qdcpn.cn
http://Oz1PvBrC.qdcpn.cn
http://tgBTu0hT.qdcpn.cn
http://www.dtcms.com/a/378450.html

相关文章:

  • Linux Node.js 安装及环境配置详细教程
  • Node.js介绍与安装
  • Node.js 版本管理全指南:卸载 Node、安装 NVM、常用命令及问题解决
  • 如何在ONLYOFFICE中使用OCR工具:轻松识别图片和PDF中的文字
  • 专题:2025社交媒体营销与电商融合趋势报告:抖音、小红书、短剧、直播全拆解|附210+份报告PDF、数据仪表盘汇总下载
  • Ubuntu22.04如何安装新版本的Node.js和npm
  • Java根据模版导出PDF文件
  • 经济学研究与机器学习应用:R语言实证分析及论文写作指南
  • 洛谷 P1967 [NOIP 2013 提高组] 货车运输(kruskal 重构树 + 求路径最小边权)
  • android 如何判定底部导航栏显示时 不是键盘显示
  • Django入门笔记
  • 中悦大华通过订单日记实现流程重构之路
  • 电波之外:socket套接字,Linux下UDP通信的孤独诗篇
  • 自动驾驶中的传感器技术44——Radar(5)
  • Linux常用命令之top:动态进程排查利器
  • 【Problem】动态规划之跳跃游戏系列
  • Android 相机框架的跨进程通信架构
  • 从零实现成绩管理系统:深入理解 Python 类方法、静态方法和属性封装
  • G1 垃圾收集器深入解析
  • 【Leetcode hot 100】104.二叉树的深度
  • nginx的基础使用
  • AWS 查询 ALB access log
  • 认知语义学对人工智能自然语言处理深层语义分析的影响与启示
  • iText与OpenPDF使用差异及中文处理完全指南
  • 动态规划算法的欢乐密码(五):子数组系列(上)
  • 【国内电子数据取证厂商龙信科技】浅析文件头和文件尾和隐写
  • Gradio全解11——Streaming:流式传输的视频应用(8)——Gemini Live API:实时音视频连接
  • [特殊字符] 玩转 Python 命令行参数:从 `-m` 到 `argparse` 的全攻略
  • [免费]基于Python的Django医院管理系统【论文+源码+SQL脚本】
  • 【音视频】Android NDK 与.so库适配