牛客练习赛42D(性质、数学)
就像题解所说的,写几个可以发现有分成四段的性质:第一段是从n开始往下贪,第二段是个数字,第三段……卧槽好吧真难描述。
然后发现这个数据量可达1e9,所以考虑“二分确定序列+数学计算”的方式解题。
首先二分出第一段的长度,这里我写得丑了,又将某些情况特判了一下;不难发现有了第一段的长度、N、K这三个量,序列已确定。
然后疯狂手推数学公式把这四段的值求出来,特殊情况的例子很好举,自己调一调打打补丁做一做膜法,大概就莽A了吧……不过要是在考场上本垃圾就必死无疑了。
#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std; typedef long long ll;
const ll mod = 1e9 + ;
ll N, K, x, ans1, ans2, ans3, ans4; ll add(ll a, ll b) {
return a + b >= mod ? a + b - mod : a + b;
} ll sub(ll a, ll b) {
return a - b < ? a - b + mod : a - b;
} ll ksm(ll a, ll b) {
ll ret = ;
for (; b; b >>= ) {
if (b & ) ret = ret * a % mod;
a = a * a % mod;
}
return ret;
} inline ll cal(ll l, ll r) {
return (l + r) * (r - l + ) / ;
} inline ll cal2(ll n) {//这是求x + 2*x^2 + ... + n*x^n的函数
ll a = n % mod * ksm(x, n + ) % mod * (x - ) % mod;
ll b = x * sub(ksm(x, n), ) % mod;
return sub(a, b) * ksm((x - ) * (x - ) % mod, mod - ) % mod;
} int main() {
cin >> N >> K;
x = N + ;
if (K == ) {
cout << cal2(N) << endl;
return ;
}
ll l = , r = N;
while (l < r) {
ll mid = (l + r) >> ;
if (cal(N - mid, N - ) <= K) l = mid + ;
else r = mid;
}
while (cal(N - l, N - ) >= K) l--;//至此l为第一段长度。如果出现54312这种,会将54作为第一段,3作为第二段,12为第三段,第四段为空
if (l) {
ans1 = add(sub(x * x % mod * (ksm(x, l) - + mod) % mod * ksm(x - , mod - ) % mod, l * x % mod), (N - l) * x % mod * (ksm(x, l) - + mod) % mod) * ksm(x - , mod - ) % mod;
K -= cal(N - l, N - );
}
if (K) {
K++, l++;//K就是第二段那个数字,l++只是为了运算简便
ans2 = K % mod * ksm(x, l) % mod;
ans3 = ksm(x, l) * cal2(K - ) % mod;
if (N - l + > K) {//如果有第四段
ll tmp = K % mod * sub(ksm(x, N + ), ksm(x, K + l)) % mod * ksm(x - , mod - ) % mod;
ans4 = add(tmp, ksm(x, K + l - ) * cal2(N - K - l + ) % mod);
}
}
cout << (ans1 + ans2 + ans3 + ans4) % mod;
return ;
}
牛客练习赛42D(性质、数学)的更多相关文章
- 牛客练习赛79E-小G的数学难题【dp,单调队列】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出\(n\)个三元组\((a_i,b_i,c_i)\). 要求选出一个集合\(S\) ...
- 牛客练习赛71 C.数学考试 (DP,容斥原理)
题意:RT 题解:先对\(p\)排个序,然后设\(dp[i]\)表示前\(i-1\)个\(p[i]\)满足条件但是\(p[i]\)不满足,即在\([1,p[i]]\)中不存在从\(p[1]\)到\(p ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
随机推荐
- 配置composer代理
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- [usaco2008feb_gold]路面修整
FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个整数A_1 ...
- Redis穿透问题解决方案
缓存穿透 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有.这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空.这样请求就绕过缓存直接查数据库,这也是经常提的 ...
- ckplayer 中的style.swf 中的 style.xml 中的修改方法
style.swf ---- > style.zip ---- > 解压成文件夹 ---- > 打开style.xml ---- > 修改 最重要的是修改保存style.xml ...
- 扩散(diffusion)和弥散(dispersion)有什么区别
作者:谢易正链接:https://www.zhihu.com/question/23914350/answer/177359196来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- codeforces 463B Caisa and Pylons 解题报告
题目链接:http://codeforces.com/problemset/problem/463/B 题目意思:Caisa 站在 0 pylon 并且只有 0 energy,他需要依次跳过1 pyl ...
- css绘制三角形
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- mycat的事务支持情况
中秋国庆一共12天,玩的有点嗨,完全没想工作的事情- -.回来赶紧补补.看了一下mycat关于事务的支持情况,做一下记录. 说mycat的事务支持之前,先说说XA协议,即分布式事务.指的是TM(事务管 ...
- hdu-5670 Machine(水题附上java代码)
题目链接: Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描 ...
- bzoj2875随机数生成器——矩阵快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩阵快速幂,把x和c分开求,最后加上即可: 为防止爆long long,要用快速乘. ...