【LOJ】#2098. 「CQOI2015」多项式
题解
令x = x - t代换一下会发现
\(\sum_{i = 0}^{n}a_i (x + t)^i = \sum_{i = 0}^{n} b_{i} x^{i}\)
剩下的就需要写高精度爆算了……
代码
#include <bits/stdc++.h>
#define enter putchar('\n')
#define space putchar(' ')
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define eps 1e-8
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 - '0' + c;
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) out(x / 10);
putchar('0' + x % 10);
}
int BASE = 100000000;
int len = 8;
struct Bignum {
vector<int> v;
Bignum(int64 x = 0) {
*this = x;
}
Bignum operator = (int64 x) {
v.clear();
do {
v.pb(x % BASE);
x /= BASE;
}while(x);
return *this;
}
Bignum operator = (string str) {
v.clear();int x;
for(int i = str.length() ; i > 0 ; i -= len) {
int st = max(0,i - len),ed = i;
sscanf(str.substr(st,ed - st).c_str(),"%d",&x);
v.pb(x);
}
return *this;
}
friend Bignum operator + (const Bignum &a,const Bignum &b) {
Bignum c;c.v.clear();
int x,g = 0,p = 0;
while(1) {
x = g;
if(p < a.v.size()) x += a.v[p];
if(p < b.v.size()) x += b.v[p];
if(!x && p >= a.v.size() && p >= b.v.size()) break;
g = x / BASE;
c.v.pb(x % BASE);
++p;
}
return c;
}
friend Bignum operator - (const Bignum &a,const Bignum &b) {
Bignum c;c.v.clear();
int x,g = 0,p = 0;
while(1) {
x = -g;g = 0;
if(p < a.v.size()) x += a.v[p];
if(p < b.v.size()) x -= b.v[p];
if(!x && p >= a.v.size() && p >= b.v.size()) break;
if(x < 0) {x += BASE;g = 1;}
c.v.pb(x);
++p;
}
return c;
}
friend Bignum operator * (const Bignum &a,const Bignum &b) {
Bignum c;c.v.clear();
c.v.resize(a.v.size() + b.v.size());
int64 x,g = 0;
for(int i = 0 ; i < a.v.size() ; ++i) {
g = 0;
for(int j = 0 ; j < b.v.size() ; ++j) {
x = 1LL * a.v[i] * b.v[j] + g + c.v[i + j];
c.v[i + j] = x % BASE;
g = x / BASE;
}
int t = i + b.v.size();
while(g) {
x = g + c.v[t];
c.v[t] = x % BASE;
g = x / BASE;
++t;
}
}
for(int i = c.v.size() - 1 ; i > 0 ; --i) {
if(!c.v[i]) c.v.pop_back();
else break;
}
return c;
}
friend Bignum operator / (const Bignum &a,const int &d) {
Bignum c;
c.v.resize(a.v.size());
int64 x = 0,t;
for(int i = a.v.size() - 1 ; i >= 0 ; --i) {
t = 1LL * x * BASE + a.v[i];
c.v[i] = t / d;
x = t % d;
}
for(int i = c.v.size() - 1 ; i > 0 ; --i) {
if(!c.v[i]) c.v.pop_back();
else break;
}
return c;
}
void print() {
int s = v.size() - 1;
printf("%d",v[s]);
--s;
for(int i = s ; i >= 0 ; --i) {
printf("%08d",v[i]);
}
}
}N,M,T,C,B,tmp;
string s[4];
struct Matrix {
int f[2][2];
Matrix(){memset(f,0,sizeof(f));}
friend Matrix operator * (const Matrix &a,const Matrix &b) {
Matrix c;
for(int i = 0 ; i <= 1 ; ++i) {
for(int j = 0 ; j <= 1 ; ++j) {
for(int k = 0 ; k <= 1 ; ++k) {
c.f[i][j] = (c.f[i][j] + a.f[i][k] * b.f[k][j]) % 3389;
}
}
}
return c;
}
}A[15],ans;
int64 a[15],num[100005];
int64 fpow(int64 x,int64 c) {
int64 res = 1,t = x;
while(c) {
if(c & 1) res = 1LL * res * t % 3389;
t = 1LL * t * t % 3389;
c >>= 1;
}
return res;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
cin>>s[0]>>s[1]>>s[2];
N = s[0];T = s[1],M = s[2];
A[0].f[0][0] = A[0].f[1][1] = 1;
A[1].f[0][0] = 1234,A[1].f[0][1] = 5678 % 3389,A[1].f[1][1] = 1;
ans = A[0];
for(int i = 2 ; i <= 10 ; ++i) A[i] = A[i - 1] * A[1];
int c = (N - M).v[0];
for(int i = 0 ; i < s[0].length() ; ++i) {
Matrix t = A[0];
for(int j = 1 ; j <= 10 ; ++j) t = t * ans;
ans = t * A[s[0][i] - '0'];
}
a[0] = (ans.f[0][0] + ans.f[0][1]) % 3389;
int64 inv = fpow(1234,3389 - 2);
for(int i = 1 ; i <= c ; ++i) a[i] = 1LL * (a[i - 1] - 5678 + 3389 * 2) * inv % 3389;
tmp = C = 1;
for(int i = c; i >= 0 ; --i) {
B = B + tmp * C * a[i];
tmp = tmp * T;
M = M + 1;
C = C * M;
C = C / (c - i + 1);
}
B.print();enter;
}
【LOJ】#2098. 「CQOI2015」多项式的更多相关文章
- Loj #2719. 「NOI2018」冒泡排序
Loj #2719. 「NOI2018」冒泡排序 题目描述 最近,小 S 对冒泡排序产生了浓厚的兴趣.为了问题简单,小 S 只研究对 *\(1\) 到 \(n\) 的排列*的冒泡排序. 下面是对冒泡排 ...
- Loj #2192. 「SHOI2014」概率充电器
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
- Loj #2542. 「PKUWC2018」随机游走
Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...
- Loj #3059. 「HNOI2019」序列
Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...
- Loj #3056. 「HNOI2019」多边形
Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...
- Loj #3055. 「HNOI2019」JOJO
Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...
随机推荐
- 【BZOJ1055】[HAOI2008]玩具取名(动态规划)
[BZOJ1055][HAOI2008]玩具取名(动态规划) 题面 BZOJ 洛谷 题解 裸的区间\(dp\),设\(f[i][j][W/I/N/G]\)表示区间\([i,j]\)能否由某个字母替换过 ...
- 在Mac上配置全局的Git忽略文件
现在同时搞着好几个项目,在Xcode.IDEA.Eclipse之间频繁的切换,每个项目的忽略文件列表都不一样,每个项目都有一个.gitignore,甚是麻烦,今天网上拔出来一个设置全局忽略的办法,记录 ...
- GDKOI2018发烧记
偏远小渔村NOIP螺旋升天选手又一次来到了广州参加GDKOI...金实的初三爷们也来啦?要被碾啦T T Day 0 跟HR Lao爷拼(biao)车到了高铁站,上了高铁居然没有颓颓颓吃吃吃(雾),安心 ...
- C++并发编程实战---阅读笔记
1. 当把函数对象传入到线程构造函数中时,需要避免“最令人头痛的语法解析”.如果传递了一个临时变量,而不是一个命名的变量:C++编译器会将其解析为函数声明,而不是类型对象的定义. 例如: class ...
- ServiceStack.Redis 之 IRedisTypedClient<第四篇>
IRedisTypedClient IRedisTypedClient类相当于IRedicClient的强类型版,其方法与属性大多数与IRedisClient类似. 它支持在Redis中使用Linq查 ...
- logstash marking url as dead 问题解决
具体问题如下图所示: 将 INFO 信息打印大致如下所示: [2018-03-05T16:26:08,711][INFO ][logstash.setting.writabledirectory] C ...
- 鸟哥的Linux私房菜——第八章
参考鸟哥的Linux私房菜内容,我只是简单的记录比较重要的知识点,所以排版没怎么注意,如果写的太严肃小白也看不进去吧. 看视频!这篇文章只作为备忘录 视频链接:http://www.tudou.com ...
- python BeautifulSoup
之前解析LXML,用的是XPath,现在临时被抓取写爬虫,接人家的代码,看到用的是BeautifulSoup,稍微学了下,也挺好用的,简单记录下用法,有机会做下和Xpath的对比测试 初始化 from ...
- 流媒体技术学习笔记之(九)减少VLC 延迟的方法
之前写过一篇关于在Linux平台上编译Android平台上VLC播放器源代码的文章,vlc这款播放器非常优秀而且是开源的,它的核心是开源视频编解码库ffmpeg.而且这款播放器还支持RTSP协议,这个 ...
- 小议 开源中国 I LOVE YOU js代码
今天在开源中国看到一篇神作<I LOVE YOU js代码>是17号的文章了,也许你已经看过了. 文章非常有意思,由 5 个 "爱心" 组成的一段js代码,能正常执行, ...