[BZOJ3933][CQOI2015]多项式 && 高精度
来源:互联网 发布:搜狗抢票软件老是退出 编辑:程序博客网 时间:2024/06/11 00:00
首先你要发现n-m很小 可以直接得出系数的关系式
然后引用PoPoQQQ大牛的东西Orz
用x替换式子中的x-t得到:
于是可以得到:
其中
然后同样的
出题人我*尼玛QAQ
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#include<map>#define SF scanf#define PF printfusing namespace std;typedef long long LL;const LL base = 1000000000LL;const LL POW[]= { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };struct Hp {int Len;LL a[2010];LL operator [] (const int &t) const { return a[t]; }LL & operator [] (const int &t) { return a[t]; }Hp (LL x = 0) {memset(a, 0, sizeof(a)); Len = 0;while(x) { a[Len++] = x % base; x /= base; }}Hp fix() {while(Len && !a[Len-1]) Len--;return *this;}Hp operator = (LL &x) {memset(a, 0, sizeof(a)); Len = 0;while(x) { a[Len++] = x % base; x /= base; }return *this;}Hp operator + (const Hp &b) const {Hp c;c.Len = max(Len, b.Len) + 1;LL add = 0;for(int i = 0; i < c.Len; i++) {add += a[i] + b[i];c[i] = add % base;add /= base;}return c.fix();}int operator ^ (const Hp &b) const {LL ret = 0;for(int i = Len-1; i >= 0; i--) ret = ret * base + a[i] - b[i];return ret;}Hp operator - (const Hp &b) const {Hp c;c.Len = max(Len, b.Len);LL del = 0;for(int i = 0; i < c.Len; i++) {del += a[i] - b[i];c[i] = del; del = 0;if(c[i] < 0) {LL tmp = (-c[i]-1) / base + 1;c[i] += tmp * base;del -= base;}}return c.fix();}Hp operator * (const Hp &b) const {Hp c;c.Len = Len + b.Len;for(int i = 0; i < Len; i++) {LL mul = 0;for(int j = 0; j <= b.Len; j++) {mul += a[i] * b[j] + c[i+j];c[i+j] = mul % base;mul /= base;}}return c.fix();}Hp operator / (const int &b) const {Hp c;c.Len = Len;LL over = 0;for(int i = Len-1; i >= 0; i--) {over = over * base + a[i];c[i] = over / b;over %= b;}return c.fix();}int operator % (const int &MOD) const {LL ret = 0;for(int i = Len-1; i >= 0; i--) ret = (ret * base + a[i]) % MOD;return ret;}Hp operator += (const Hp &b) { return *this = *this + b; } Hp operator -= (const Hp &b) { return *this = *this - b; } Hp operator *= (const Hp &b) { return *this = *this * b; } Hp operator /= (const int &b) { return *this = *this / b; }bool operator < (const Hp &b) const { if(Len != b.Len) return Len < b.Len; for(int i = Len-1; i >= 0; i--) if(a[i] != b[i]) return a[i] < b[i]; return false; } bool operator > (const Hp &b) const { return b < *this; } bool operator <= (const Hp &b) const { return !(b < *this); } bool operator >= (const Hp &b) const { return !(*this < b); } bool operator != (const Hp &b) const { return *this < b || b < *this; } bool operator == (const Hp &b) const { return !(*this < b) && !(b < *this); }} n, m;char s1[3010], s2[3010];int t;int pow_mod(int x, int k) {int ret = 1;while(k) {if(k & 1) ret = ret * x % 3389;x = x * x % 3389;k >>= 1;}return ret;}void print(const Hp &A) {if(A.Len == 0) { putchar('0'); return ; }PF("%d", (int)A[A.Len-1]);for(int i = A.Len-2; i >= 0; i--) PF("%09d", (int)A[i]);}void st2i(char *s, Hp &x) {int len = strlen(s+1);for(int i = len; i; i--)x[(len-i)/9] += (s[i] - '0') * POW[(len-i) % 9];x.Len = len / 9 + 1;}int GetA(const Hp &x) {int tmp = x % 3388;return (209 * pow_mod(1234, tmp) + 3181) % 3389;}Hp C(1), T(1), ans;int main() {int del = 0;SF("%s%d%s", s1+1, &t, s2+1);st2i(s1, n); st2i(s2, m);del = n^m;for(int i = 0; i <= del; i++) {if(i) {C *= m + i;C /= i;T *= t;}ans += C * T * GetA(m+i);}print(ans);}
0 0
- [BZOJ3933][CQOI2015]多项式 && 高精度
- [BZOJ3933][CQOI2015]多项式-高精度
- [CQOI2015]&[bzoj3933]多项式 二项式定理+高精度
- BZOJ 3933 CQOI2015 多项式 高精度
- NKOJ 3252 (CQOI 2015) 多项式(数学,高精度)
- 多项式
- 多项式
- 高精度
- 高精度
- 高精度
- 高精度。。
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- asm-elf 练习hello,world练练手感
- 蓝桥杯 串的处理
- Android listview viewpager解决冲突 滑动
- [省选前题目整理][BZOJ 1185][HNOI 2007]最小矩形覆盖(旋转卡壳)
- 蓝桥杯代码填空题集锦
- [BZOJ3933][CQOI2015]多项式 && 高精度
- An internal error occurred during: "Launching New_configuration"
- java中volatile关键字的含义
- T-SQL:插入并返回自增ID
- jquery核心函数jQuery()学习
- informatica 为INFA SERVER准备表空间和用户
- Android 之 Telegram 开源项目
- ZOJ 3591 Nim 前缀和+位运算
- C#源代码统计程序