题目传送

就像题解所说的,写几个可以发现有分成四段的性质:第一段是从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 ;
}

最新文章

  1. WPF SpreadSheetGear电子表单
  2. 内核控制Meta标签:让360浏览器默认使用极速模式打开网页(转)
  3. 关于web页面性能测量指标与建议
  4. sql语句 之聚合函数
  5. Eclipse 的 Debug 介绍与技巧【转载】
  6. RM报表里的变量
  7. eclipse增加浏览器chrome
  8. [OOD]违反里氏替换原则的解决方案
  9. navigator.geolocation例子
  10. [翻译]Django速查表
  11. fiddler修改Requests之前的数据和response 之后的数据
  12. Java高级特性 第12节 XML技术
  13. 【php】下载站系统Simple Down v5.5.1 xss跨站漏洞分析
  14. postgres on linux red hat 7 配置问题
  15. SSH使用自定义私钥进行登录
  16. cocos2d-x JS 弹出对话框触摸监听(吞噬点击事件遮挡层)
  17. AngularJS 笔记2
  18. 解决mysql的Too many connections
  19. 富文本编辑器layedit,调用setContent方法会报错
  20. XAMPP安装PHP_GMP

热门文章

  1. delphi如何让程序最小化到任务栏(使用Shell_NotifyIcon API函数)
  2. vue路由总结
  3. CAS无锁机制原理
  4. (转)如何使用Java、Servlet创建二维码
  5. html5--3.10 input元素(9)
  6. Log4j输出格式控制--log4j的PatternLayout参数含义
  7. SecureCRT自动备份脚本-思科
  8. 「USACO16OPEN」「LuoguP3146」248(区间dp
  9. ADB命令小结
  10. POJ2823(优先队列)