BZOJ3565 : [SHOI2014]超能粒子炮
若$a\leq 1000$,则整个$f$数列会形成$O(a)$段公差为$a$的等差数列。
否则$a^{-1}\leq 1000$,设$ai+b=f(i)$,那么有$i=a^{-1}f(i)-ba^{-1}$。
交换$i$和$f(i)$的地位,这将形成$O(a^{-1})$段公差为$a^{-1}$的等差数列。
暴力枚举两个等差数列,然后$O(1)$计算逆序对个数即可。
时间复杂度$O(\min(a,a^{-1})^2)$。
#include<cstdio>
typedef long long ll;
int n,m,lim,a,b,i,j,cnt;ll ans;
struct E{int s,l;}e[3000];
int pow(int a,int b){int t=1;for(;b;b>>=1,a=1LL*a*a%m)if(b&1)t=1LL*t*a%m;return t;}
void add(int s,int l){
if(lim){
if(s>lim)return;
if(!s){
s+=a,l--;
if(s>lim||l<0)return;
}
int t=(lim-s)/a;
if(l>t)l=t;
}
e[++cnt].s=s;e[cnt].l=l;
}
inline ll cal(const E&A,const E&B){
int L=(B.s-A.s)/a;
if(L<0)L=0;
while(1LL*a*L+A.s<=B.s)L++;
if(L>A.l)return 0;
int F=(a*L+A.s-B.s)/a;
while(1LL*a*(F+1)+B.s<a*L+A.s)F++;
if(F>B.l)F=B.l;
F++;
int R=(a*B.l+B.s-A.s)/a;
if(R<0)R=0;
while(1LL*a*R+A.s<=a*B.l+B.s)R++;
if(R>A.l)R=A.l;
int G=(a*R+A.s-B.s)/a;
while(1LL*a*(G+1)+B.s<a*R+A.s)G++;
if(G>B.l)G=B.l;
G++;
return 1LL*(F+G)*(R-L+1)/2+1LL*G*(A.l-R);
}
int main(){
scanf("%d%d%d%d",&n,&m,&a,&b);
if(a>1000)a=pow(a,m-2),b=1LL*(m-b)*a%m,lim=n,n=m-1;
if(lim)add(b,0);
while(n){
b=(b+a)%m;
i=(m-b-1)/a;
while(1LL*a*(i+1)+b<m)i++;
if(i>=n)i=n-1;
add(b,i);
n-=i+1;
b=(1LL*a*i+b)%m;
}
for(i=1;i<=cnt;i++)for(j=i+1;j<=cnt;j++)ans+=cal(e[i],e[j]);
return printf("%lld",ans),0;
}
BZOJ3565 : [SHOI2014]超能粒子炮的更多相关文章
- 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 95 Solved: 33[Submit][Statu ...
- Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 178 Solved: 70[Submit][Stat ...
- bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]
4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...
- 【BZOJ4591】[SHOI2015]超能粒子炮·改 (卢卡斯定理)
[BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. ...
- 洛谷 P4345 [SHOI2015]超能粒子炮·改 解题报告
P4345 [SHOI2015]超能粒子炮·改 题意 求\(\sum_{i=0}^k\binom{n}{i}\),\(T\)组数据 范围 \(T\le 10^5,n,j\le 10^{18}\) 设\ ...
- loj#2038. 「SHOI2015」超能粒子炮・改
题目链接 loj#2038. 「SHOI2015」超能粒子炮・改 题解 卢卡斯定理 之后对于%p分类 剩下的是个子问题递归 n,k小于p的S可以预处理,C可以卢卡斯算 代码 #include<c ...
- bzoj 4591 超能粒子炮·改 - Lucas
Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...
- BZOJ 4591 【SHOI2015】 超能粒子炮·改
题目链接:超能粒子炮·改 这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了. 我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一 ...
- bzoj4591 / P4345 [SHOI2015]超能粒子炮·改
P4345 [SHOI2015]超能粒子炮·改 题意:求$\sum_{i=1}^{k}C(n,i)\%(P=2333)$ 肯定要先拆开,不然怎么做呢(大雾) 把$C(n,i)$用$lucas$分解一下 ...
随机推荐
- 论文阅读笔记十九:PIXEL DECONVOLUTIONAL NETWORKS(CVPR2017)
论文源址:https://arxiv.org/abs/1705.06820 tensorflow(github): https://github.com/HongyangGao/PixelDCN 基于 ...
- UI开发总结
1. bootstrap tooltip 修改内容 <i class="ace-icon fa fa-user" id="test-tooltip" ti ...
- openstack 基础
一:openstack起源: 1.rackspace和NASA(美国国家航空航天局)共同发起的开源项目 1.1/rackspace:贡献的swaft子项目(存储组件) 1.2/NASA:贡献了nova ...
- 支持向量机-完整Platt-SMO算法加速优化
完整版SMO算法与简单的SMO算法: 实现alpha的更改和代数运算的优化环节一模一样,唯一的不同就是选择alpha的方式.完整版应用了一些能够提速的方法. 同样使用Jupyter实现,后面不在赘述 ...
- 最短路径问题---Dijkstra算法详解
侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...
- PAT Basic 1071. 小赌怡情(15)
题目内容 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注t个筹码后,计算机给出第二个数.若玩家猜对 ...
- 一脸懵逼加从入门到绝望学习hadoop之Caused by: java.net.UnknownHostException: master报错
windows下开发hadoop应用程序,hadoop部署在linux环境中, 在运行调试时可能会出现无法找到主机,类似异常信息如下: java.net.UnknownHostException: u ...
- Centos7安装OpenJDK8
https://blog.csdn.net/kanbe_kotori/article/details/70948430
- Vuex详解笔记2
关于 state 每个vuex 应用只有一个 store 实例,所以使用起来不会太复杂,对于定位错误状态和操作会很方便. 简单用法:在vuex 的计算属性中返回vuex 的状态 最基本的使用方式,通过 ...
- C#学习-类和结构
类和结构体,对两者进行比较 语法上的区别在于,定义类要使用关键字class,而定义结构体则使用关键字struct; 结构体中不可对声明字段进行初始化,但类可以: 如果没有为类显式地定义构造函数,C#编 ...