热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

codeforces:F.KireiandtheLinearFunction【暴力优化+避开大数运算+避开str切片转int】

分析核心就是找到v1*vv2k(mod9)那就固定一个v1看看有没有v2k-v1*v实际上vi可以通过滑动窗口看长度为w的余数实际上v也可以通过切片直接获取然后看看固定v1&#x

在这里插入图片描述
在这里插入图片描述


分析

核心就是找到v1 * v + v2 == k (mod 9)
那就固定一个v1看看有没有v2 = k - v1 * v

实际上vi可以通过滑动窗口看长度为w的余数
实际上v也可以通过切片直接获取
然后看看固定v1,求出v2后,我们用一个dict记录每个余数的idx
如果v1v2都有长度且不同,那么都取第一个;如果相同,就取第一第二个
然后拿到最小的v1,v2


优化点

1.vi可以通过滑动窗口看长度为w的余数涉及大数运算,因为w最大可以到10**5
由于我们是在mod 9的意义下的,所以数字可以转成数位和,用一个前缀和维护即可

2.v也可以通过切片直接获取涉及字符串切片转int,复杂度实际o(r-l+1) -> o(n)
同理,由于是mod 9意义,转成数位和,用前缀和优化成o(1)即可


Ac code

import sys
from collections import defaultdict
from itertools import accumulate
input &#61; sys.stdin.readlinedef solve():s &#61; input().strip()n &#61; len(s)w, m &#61; list(map(int, input().split()))d &#61; defaultdict(list)# ---------------------------# slide window# big number operation: bad!# ---------------------------# curr &#61; 0# for i in range(n):# if i # curr &#61; curr * 10 &#43; int(s[i])# else:# d[curr % 9].append(i - w)# curr -&#61; int(s[i - w]) * 10 ** (w - 1)# curr &#61; curr * 10 &#43; int(s[i])# d[curr % 9].append(n - w)# %3 or %9 the same as the sum of the digitslst &#61; [int(c) for c in s]preSum &#61; list(accumulate(lst, initial &#61; 0))# avoid big number, use sum of digitsfor i in range(n - w &#43; 1):u &#61; (preSum[i &#43; w] - preSum[i]) % 9d[u].append(i)#print(d)for _ in range(m):l, r, k &#61; list(map(int, input().split()))# ---------------------------# slice &#43; int &#61;> o(r - l &#43; 1) &#61;> bad as o(N)# ---------------------------# v_l_r &#61; int(s[l - 1:r]) % 9# use preSum insteadv_l_r &#61; (preSum[r] - preSum[l - 1]) % 9# v2 &#61; ki - v1 * v_l_rL1, L2 &#61; n &#43; 1, n &#43; 1for v1 in range(9):if len(d[v1]) > 0:v2 &#61; (k - v1 * v_l_r) % 9if v1 !&#61; v2 and len(d[v2]) > 0:# choices.append([d[v1][0], d[v2][0]])if d[v1][0] < L1:L1, L2 &#61; d[v1][0], d[v2][0]elif d[v1][0] &#61;&#61; L1 and d[v2][0] < L2:L1, L2 &#61; d[v1][0], d[v2][0]elif v1 &#61;&#61; v2 and len(d[v1]) > 1:# choices.append([d[v1][0], d[v1][1]])if d[v1][0] < L1:L1, L2 &#61; d[v1][0], d[v1][1]elif d[v1][0] &#61;&#61; L1 and d[v1][1] < L2:L1, L2 &#61; d[v1][0], d[v1][1]if L1 &#61;&#61; n &#43; 1:print(-1, -1)else:print(L1 &#43; 1, L2 &#43; 1)if __name__ &#61;&#61; &#39;__main__&#39;:for _ in range(int(input())):solve()

总结

对于mod 3和mod 9意义下的大数计算&#xff0c;或者字符串转大数
可以考虑转成数位和进行优化


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • imnewtotheswiftandxcodeworld,soimhavingaproblemtryingtointegrateapackagetomypro ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
和尚与尼姑离婚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有