牛客练习赛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 ...
随机推荐
- UVA1025 A Spy in the Metro —— DP
题目链接: https://vjudge.net/problem/UVA-1025 题解: 详情请看紫书P267. 与其说是DP题,我觉得更像是模拟题,特别是用记忆化搜索写. 递推: #include ...
- codeforces A. Point on Spiral 解题报告
题目链接:http://codeforces.com/problemset/problem/279/A 题目意思:给出一个坐标点(x, y),问当从(0, 0) 开始到达该点转过的拐角有多少个.(拐角 ...
- the art of seo(chapter six)
Developing an SEO-Friendly Website ***Making Your Site Accessible to Search Engines***1.Indexable Co ...
- Idea中的插件-列出Java Bean的所有set方法
插件的git 地址: https://github.com/yoke233/genSets 将插件jar导入idea中,使用方式是对象后加.allset,然后回车.
- linux应用之tomcat的安装及配置(centos)
CentOS 6.6下安装配置Tomcat环境 [日期:2015-08-25] 来源:Linux社区 作者:tae44 [字体:大 中 小] 实验系统:CentOS 6.6_x86_64 实验前 ...
- hdu 1280 前m大的数(排序)
题意:排序 思路:排序 #include<iostream> #include<stdio.h> #include<algorithm> using namespa ...
- Log4j输出格式控制--log4j的PatternLayout参数含义
参数 说明 例子 %c 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介 假设当前logger名字 ...
- LA-5059(组合游戏)
题意: 有n堆石子,分别有a1,a2,...,an个,两个游戏者轮流操作,每次可以选一堆m拿走至少一个且不超过一半的石子,谁不能拿石子就算输; 思路: a1太大打印sg表找规律,然后就是异或和了; A ...
- Careless Me
我在百度知道上提了一个问题: 如图我在menu.xml里试图加一个search的按钮,但我从网页上复制了图中第二个item里的代码,运行的时候,这个item却总是出现在overflow(下拉菜单)里面 ...
- python 基础之第十天(闭包,装饰器,生成器,tarfile与hashlib模块使用)
局部变量与全局变量 局部变量:在函数里面定义的,只有当函数活动时才生效 全局变量:不在函数里面的 In [1]: x=10 In [2]: def bar(): ...: x=20 ...: prin ...