牛客练习赛16D K进制 数论(待理解QAQ)
正解:数论
解题报告:
行吧那就让我一点点推出来趴QAQ
先放张图quq这是我唯一一个找到了的有靠谱讲解的题解了QAQ(虽然我太弱了还是没看懂QAQ
首先最前面还是,能理解的
就是你考虑k进制的进位,因为进位之后我们会把所有再加起来,就相当于把一个k变成了一个1 这里是可以理解的
然后继续,尝试理解?
umm首先,如果B=0,显然的一点就是只有组成它的数都是0才行(因为相当于是所有数位之和=0那只能是全0咯.特判一波先特殊处理掉
然后,然后实在理解不了了太蠢了,,,,不行我决定再去找一波博客QAQ
因为每个x的最终价值都是1<=val<k的.
那么 知道[i,j-1]的价值x,可以容易知道[i+1,j]的价值y.
val=x+a[j] val最大为2*k-2 若val>=k 则进位,十位为1,个位为val-k.最后结果:1+val-k<=k-1.
首先想到 直接枚举计算O(n2) TLE.
(a[L]+a[L+1]+..a[R]) 每次若有两个数相加超过k,则会用一个1和余k部分来代替.
就是说 x→x%k+1 就可以转化成,x%(k-1) 唯一就是如果余数是0其实要变成k-1嘛
那么d[L,R]等价于(a[L]+a[L+1]+...+a[R]) %(k-1) 的值.
现在求出前缀p[i]%(k-1)的值.
枚举右端点r,要想知道有多少个左端点L,满足d[L,R]==b.
那么 b ≡d[r]-d[L-1] (mod k-1) .
变形得 d[L-1] ≡ d[r]-b (mod k-1)
然后我就开个数组 下标表示mod k-1的余数 数值表示有几个,每扫一个加一下然后把我扫到的这个也放进数组,over
哇这么整理一下还是感觉,勉强能理解的欸!
放,代码
#include <bits/stdc++.h> using namespace std; #define ll long long ; ll k,b,n,pre[N],res=,z=,tt=; map<ll,ll> cnt; inline ll read() { ;; '))ch=getchar(); ; )+(x<<)+(ch^'),ch=getchar(); return y?x:-x; } int main() { k=read();b=read();n=read(); ;i<=n;i++) { ll t=read(); pre[i]=(pre[i-]+t)%(k-); t?tt=:z+=++tt; } ); cnt[]++; ;i<=n;i++) { ll val=(pre[i]-b+k-)%(k-); res+=cnt[val]; cnt[pre[i]]++; } ) res-=z; ; }
我真的觉得,这题好难啊,,,真的只是进阶嘛,,,哭了TT
牛客练习赛16D K进制 数论(待理解QAQ)的更多相关文章
- 陕西师范大学第七届程序设计竞赛网络同步赛 F WWX的礼物【数学/k进制下x^n的位数/log】
链接:https://www.nowcoder.com/acm/contest/121/F来源:牛客网 题目描述 WWX的女朋友送给了他一个礼物,可是礼物却被一把K进制密码锁锁住了.在礼物盒上还有一张 ...
- K进制数
题目描述 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 例: 1010 ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
- 牛客练习赛50 D tokitsukaze and Event (最短路,思维)
牛客练习赛50 D tokitsukaze and Event 链接:https://ac.nowcoder.com/acm/contest/1080/D来源:牛客网 时间限制:C/C++ 1秒,其他 ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 求x!在k进制下后缀零的个数(洛谷月赛T1)
求x!在k进制下后缀和的个数 20分: 求十进制下的x!后缀和的个数 40分: 高精求阶乘,直接模拟过程 (我不管反正我不打,本蒟蒻最讨厌高精了) 60分 利用一个定理(网上有求x!在 ...
- 牛客练习赛64 D【容斥+背包】
牛客练习赛64 D.宝石装箱 Description \(n\)颗宝石装进\(n\)个箱子使得每个箱子中都有一颗宝石.第\(i\)颗宝石不能装入第\(a_i\)个箱子.求合法的装箱方案对\(99824 ...
随机推荐
- RGB24转YUV420
BOOL RGB2YUV(LPBYTE RgbBuf, UINT nWidth, UINT nHeight, LPBYTE yuvBuf, unsigned long *len) { if (RgbB ...
- LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
解决方法 属性=>配置属性=>输入=>忽略特定库LIBCMT
- make: Warning: File `Makefile' has modification time 17 s in the future
linux下,make makefile文件的时候报警告: make: Warning: File `Makefile' has modification time 17 s in the futur ...
- 122、详解Glide图片加载库常用方法
转载:http://blog.csdn.net/android_xiong_st/article/details/53129256 Glide加载网络图片, 显示的还是以前的图片! (最全解决方案!) ...
- 使用CreateProcess创建新的process 并返回process运行结束返回值
转自:http://blog.csdn.net/zgl7903/article/details/5975284 转载这篇主要是记住:获得create的新进程运行结束时的返回值的方法 如下: #in ...
- VC利用调试寄存器实现硬件断点源码
[文章标题]:VC利用调试寄存器实现硬件断点源码 [文章作者]:yhswwr(SilenceRet) [作者QQ]:3412259 [编写语言]:C++ [使用工具]:VS2008.VC++9 [本文 ...
- 【Java基础】StringTokenizer用法
写在前面 因为最近在接触hadoop的东西,看示例WordCount的时候里面有一个StringTokenizer的东西特地看了一下 The string tokenizer class allows ...
- Nginx写IO占用高故障处理
文章来源:<https://www.centos.bz/2015/04/handle-nginx-write-io-problem/> 故障现象 突然收到一台服务器负载过高告警,紧接着网站 ...
- Particle 粒子效果使用(适配微信小游戏,particle is not defined)
在微信小游戏中使用粒子效果 参考: 1. 粒子库下载地址 2. 粒子官方使用教程 3. 水友解决微信小游戏particle is not defined 一.下载第三方库 Git地址:https:// ...
- 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl
1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk, 添加 -Dmaven.multiModuleP ...