【ZOJ - 4029】Now Loading!!!(整除分块,思维,二分,前缀和)
题干:
其中 zi 是第i次询问后的z。
解题报告:
因为有取log运算,所以分母的取值肯定不会超过30种,所以分每一个分母的时候,用前缀和优化一个和,最后求乘积就行了。(其实不需要快速幂,用快速幂也可以但是容易出错,因为需要判断如果已经大于1e9了就直接return到一个break的地方,但是wjh大佬强啊!!所以不怂、、)
另外这题要注意不能直接一个前缀和求出来之后向下取整,举个例子,1/3+1/3+1/3+1/3+1/3+1/3+1/3,正确答案应该是0,但是你这样直接分子前缀和求得的结果就是2,所以应该维护30个向下取整前缀和,就巧妙的优化了这个问题。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 5e5 + 5;
const ll mod = 1e9;
ll a[MAX],p[MAX];
ll all[MAX][31];
ll qsm(ll a,ll b,int &ff) {ll t=1;int fl=0;while(b) {if(b&1) {t*=a;if(t>mod||fl) {ff=1;break;}t%=mod;}a*=a;if(a>mod) fl=1;a%=mod;b>>=1;}return t;
}
int main() {int t;cin>>t;while(t--) {int n,m;scanf("%d%d",&n,&m);for(int i=1; i<=n; i++) {scanf("%lld",&a[i]);}sort(a+1,a+n+1);for(int j = 1; j<=30; j++) {for(int i=1; i<=n; i++) {all[i][j]=all[i-1][j]+a[i]/j;}}ll ans=0;for(ll i=1; i<=m; i++) {ll tmp=0;scanf("%lld",&p[i]);for(ll j=1; j<=n;) {int ff=0;ll tt=(ll)ceil(log(a[j]*1.0)*1.0/log(p[i]*1.0));//求出大分母 ll maxx=qsm(p[i],tt,ff);if(ff) {ll sum1=all[n][tt]-all[j-1][tt];tmp=(tmp+sum1)%mod;break;}int pos=upper_bound(a+1,a+n+1,maxx)-a - 1; //找到最后一个小于等于他的。 ll sum=all[pos][tt]-all[j-1][tt];tmp=(tmp+sum)%mod;j=pos+1;}ans=(ans+i*tmp)%mod;}printf("%lld\n",ans%mod);}return 0;
}
【ZOJ - 4029】Now Loading!!!(整除分块,思维,二分,前缀和)相关推荐
- 1041D - Glider(思维+二分+前缀和)
https://codeforces.com/problemset/problem/1041/D 思路: 可以发现,选择的起点在当前某个线段区间的左端点一定不会更差. 于是On枚举起点位置,快速找到其 ...
- luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)
整理的算法模板合集: ACM模板 题目传送门 本题中数据为5e4,我们只需要筛一次5e4就行了. 双倍经验的P4450 双亲数中数据达到了1e6,我们直接筛1e6的莫比乌斯函数有点不可取,因为只有一组 ...
- 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))
A-XOR SUM 通过简单观察得知连续四个数的异或值就是等于0,暴力找出左区间和右区间就可以了,最多跑四个单位 0^1^2^3==0 4^5^6^7=0 #include<bits/std ...
- SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...
- P3935 Calculating 整除分块
传送门 文章目录 题意: 思路: 题意: 思路: 我们设s(x)=∑i=1nf(x)s(x)=\sum_{i=1}^nf(x)s(x)=∑i=1nf(x),那么答案就是s(r)−s(l−1)s(r) ...
- P2261 [CQOI2007]余数求和 整除分块
传送门 文章目录 题意: 思路: 题意: n,k≤1e9n,k\le1e9n,k≤1e9 思路: 考虑转换式子,∑i=1nkmodi=∑i=1n(k−⌊ki⌋∗i)=n∗k−∑i=1n⌊ki⌋∗i\s ...
- 【WC2014】时空穿梭【组合数】【莫比乌斯反演】【整除分块】【暴力多项式】
题意:TTT 组数据,给一个 nnn 维空间,第 iii 维大小为 [1,mi]∩Z[1,m_i]\cap \Z[1,mi]∩Z,求大小为 ccc 的严格偏序上升的共线点集个数.答案模 100071 ...
- 【NOI2016】循环之美【莫比乌斯反演】【整除分块】【杜教筛】【类杜教筛】
传送门 题意:给定n,m,kn,m,kn,m,k,求1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m时xyx \over yyx中数值不同的纯循环小 ...
- [CQOI2017] 小Q的表格(分块 + 整除分块 + 数学 + 前缀和)
problem luogu-P3700 solution f(a,b)=f(b,a)f(a,b)=f(b,a)f(a,b)=f(b,a) 意味着我们只用考虑半个棋盘的信息. b∗f(a,a+b)=(a ...
- P3235-[HNOI2014]江南乐【整除分块,SG函数】
正题 题目链接:https://www.luogu.com.cn/problem/P3235 题目大意 TTT组游戏,固定给出FFF.每组游戏有nnn个石头,每次操作的人可以选择一个数量不少于FFF的 ...
最新文章
- webpack配置alias别名设置
- 解决Intellij idea运行android application时找不到aapt/li...
- 我对孩子学习编程的一点思考
- 数字图像处理之空间域图像增强
- 2011目标 及 总结
- 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期
- C/C++程序员应聘常见面试题深入剖析(1)
- linux 安装 yum
- 2021-05-26python 批量更改图片格式
- dis计算机领域中是什么意思,dis
- 人工智能、大数据、云计算概念
- sql打印每年入职人数_2015年3D打印基础知识-拥有16年全职经验的人
- JQuery实现复选框CheckBox的全选、反选、提交操作
- get这3种方式 轻松发送邮件超大附件
- pyqt实现图片轮播
- html5设计制作作品,16个精美的 HTML5 作品集网站设计案例
- SwiftUI中如何使用App Tracking Transparency Framework
- 关于Linux中的docker-compose.yml配置文件
- 高数习题第七章总练习题(上)
- 微信小程序头像用wx.getImageInfo获取失败
热门文章
- 图谱问答-理解query
- 【数据结构与算法】【算法思想】贪心算法
- 为什么火狐浏览器中点击按钮失效_各种浏览器审查、监听http头工具介绍
- mysql分布式一致性hash_分布式哈希一致性
- idea中连接mysql插入成功数据 在navicat中刷新表格没有数据_MySQL入门简记
- 用session实现html登录页面跳转页面跳转页面跳转,js判断登录与否并确定跳转页面的方法...
- mac删除android sd卡,如何从mac完全删除android及其所有文件?
- 初中位似图形作图_[如何画位似图形] 位似图形的画法及步骤
- python筛选法求素数讲解_埃氏筛选法求素数 Python
- webpaper网页出题语言