题目传送

就像题解所说的,写几个可以发现有分成四段的性质:第一段是从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(性质、数学)的更多相关文章

  1. 牛客练习赛79E-小G的数学难题【dp,单调队列】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出\(n\)个三元组\((a_i,b_i,c_i)\). 要求选出一个集合\(S\) ...

  2. 牛客练习赛71 C.数学考试 (DP,容斥原理)

    题意:RT 题解:先对\(p\)排个序,然后设\(dp[i]\)表示前\(i-1\)个\(p[i]\)满足条件但是\(p[i]\)不满足,即在\([1,p[i]]\)中不存在从\(p[1]\)到\(p ...

  3. 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)

    牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...

  4. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  5. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  6. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  7. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  8. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

  9. 牛客练习赛26:D-xor序列(线性基)

    链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...

随机推荐

  1. 关于oracle批量插入数据遇到的问题

    截取部分日志信息: 2015-09-01 14:48:47,132 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReade ...

  2. C++引用详解【转】

    本文转载自:http://www.cnblogs.com/gw811/archive/2012/10/20/2732687.html 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作 ...

  3. git多人协作冲突解决方法

    http://www.trinea.cn/dev-tools/git-skill/ http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361 ...

  4. Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs

    题目链接: http://codeforces.com/problemset/problem/445/A 题解: 这道题是在现场赛的最后一分钟通过的,相当惊险,而且做的过程也很曲折. 先是用递推,结果 ...

  5. SystemV和BSD的区别

    目前,Unix操作系统不管其内核如何,其操作风格上主要分为SystemV(目前一般采用其第4个版本SVR4)和BSD两种.其代表操作系统本别是Solaris和FreeBSD.当然,在SunOS4(So ...

  6. html5--5-9 绘制扇形

    html5--5-9 绘制扇形 学习要点 综合运用已经学过的知识绘制一个扇形 矩形的绘制方法 rect(x,y,w,h)创建一个矩形 strokeRect(x,y,w,hx,y,w,h) 绘制矩形(无 ...

  7. 如何查看智能手机的IP地址

      1.  外网IP IP地址可简单分为两类.外网IP或称公网IP是用来在Internet上唯一标识你的设备的.如果你通过GPRS或者3G技术接入互联网的话(通过运营商网络),那么你也可以通过下面的方 ...

  8. 用css截取字符 css排版隐藏溢出文本

    方法一: <div style="width:300px; overflow:hidden;  text-overflow:ellipsis; white-space:nowrap;& ...

  9. Pyhton:汉诺塔游戏

    #汉诺塔游戏攻略! def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) #将前n-1个盘子从x移动到y上 ...

  10. Opencv— — Color Gradient

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...