我们把每一行看成一个多项式 f[i][1] + f[i][2] * x + f[i][3] * x^2 + ..... + f[i][n] * x^(n-1) 的话,一行转移到下一行就相当于乘上一个{b*x + a}的多项式。

于是本题就有了不下五种做法233333,但是大部分做法都因为用了多次NTT而被卡常,就算只用了一次NTT的算法过了,那也不是最优的,因为我们完全可以把 (b*x + a)^n 广义二项式展开,这样就可以 O(N) 计算出转移多项式 (因为n<0也适用广义多项式定理,所以多项式求逆干嘛)。

而且因为询问只问一个点的值,所以我们直接暴力卷积算出这个点的值就行了,根本不用写NTT把这一行都算出来(别拦我我要去跳楼)。然后考场我就是因为把这一行都算出来了...导致复杂度在O(NK)上多了一个log

好不容易想到广义二项式展开了最后还是只有40分qwq。。。。。

  1. /*
  2. (bx + a)^n 广义二项式定理展开
  3.  
  4. (bx)^k * a^(n-k) * n^k_ * (1/k!)
  5.  
  6. x=0 : a^n * n^0_ * (1/0!)
  7. x=1 : (bx)^1 * a^(n-1) * n^1_ * (1/1!)
  8. */
  9. #include<iostream>
  10. #include<cstdio>
  11. #include<cstdlib>
  12. #include<algorithm>
  13. #include<cmath>
  14. #include<ctime>
  15. #include<cstring>
  16. #define ll long long
  17. using namespace std;
  18. const int maxn=100000;
  19. const int ha=998244353;
  20. int o[maxn+5],ni[maxn+5];
  21. int n,m,A,B,P,Q,jc[maxn+5];
  22.  
  23. inline int add(int x,int y){
  24. x+=y;
  25. return x>=ha?x-ha:x;
  26. }
  27.  
  28. inline int ksm(int x,int y){
  29. int an=1;
  30. for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha;
  31. return an;
  32. }
  33.  
  34. inline void init(){
  35. jc[0]=1;
  36. for(int i=1;i<=maxn;i++) jc[i]=jc[i-1]*(ll)i%ha;
  37. ni[maxn]=ksm(jc[maxn],ha-2);
  38. for(int i=maxn;i;i--) ni[i-1]=ni[i]*(ll)i%ha;
  39. }
  40.  
  41. inline int get(int x,int y){
  42. if(!x) return o[y];
  43. int C=(x>0?ksm(A,x):ksm(ksm(A,-x),ha-2)),invA=ksm(A,ha-2);
  44. int ans=0,S=1,now=add(x,ha);
  45.  
  46. for(int i=0;i<=y;S=S*(ll)now%ha,now=add(now,ha-1),i++){
  47. ans=add(ans,S*(ll)ni[i]%ha*(ll)C%ha*(ll)o[y-i]%ha);
  48. C=C*(ll)B%ha*(ll)invA%ha;
  49. }
  50.  
  51. return ans;
  52. }
  53.  
  54. inline void solve(){
  55. for(int i=0;i<n;i++) scanf("%d",o+i);
  56. while(Q--){
  57. int row,line;
  58. scanf("%d%d",&row,&line),line--;
  59. printf("%d\n",get(row-P,line));
  60. }
  61. }
  62.  
  63. int main(){
  64. // freopen("table.in","r",stdin);
  65. // freopen("table.out","w",stdout);
  66. init();
  67. scanf("%d%d%d%d%d%d",&m,&n,&A,&B,&P,&Q);
  68. solve();
  69. return 0;
  70. }

  

某考试 T1 table的更多相关文章

  1. 考试T1总结(又CE?!)

    考试T1CE... 最近不适合考试 T1 扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题.歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海棠,但是如今都已枯萎 ...

  2. 某考试T1 game

    题目背景 无 题目描述 Alice 和 Bob 在一个圆环上玩游戏.圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n.Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n− ...

  3. 某考试 T1 arg

    题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 ...

  4. 某考试 T1 lcm

    把lcm写成 (a+n)*(b+n) / gcd(a+n,b+n). 因为gcd可以辗转相减,所以就成了gcd(abs(a-b),a+n),一个常量一个变量之间的gcd,我们可以直接把abs(a-b) ...

  5. 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)

    \(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...

  6. 2019.2.14 考试T1 FFT

    \(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个 ...

  7. 某考试 T1 fair (18.5.1版)

    转化一下模型:每天可以选1也可以选0,但是任意前i天(i<=n)1的个数都必须>=0的个数,求总方案数/2^n. 然后可以发现这是一个经典题,随便推一下公式发现等于  C(n,n/2)/2 ...

  8. 某考试 T1 str

    一开始死磕sam,发现根本没法做...... 后来想了想,反正匹配子串的大部分不是sam就是 二分+hash啊,,,于是就想了想二分+hash,发现好像可以做啊! 就是假设我们要让 s1[1] 映射到 ...

  9. 某考试 T1 monopoly

    可以很容易的发现,如果选了最高的房子,那么就不能再选了:否则在左边选一坨合法的,在右边选一坨合法的,拼起来还是合法的. 所以我们可以处理出,每个数的控制区间[L,R] (保证这个区间是其他数都小于它的 ...

随机推荐

  1. codevs 5438 zbd之难题(水题日常)

     时间限制: 1 s  空间限制: 1000 KB  题目等级 : 白银 Silver 题目描述 Description zbd想要一个计算器,请你编一个计算器. 输入描述 Input Descrip ...

  2. dropdb - 删除一个现有 PostgreSQL 数据库

    SYNOPSIS dropdb [ option...] dbname DESCRIPTION 描述 dropdb 删除一个现有 PostgreSQL 数据库. 执行这条命令的人必须是数据库超级用户, ...

  3. uva1619 Feel Good

    单调队列,滑动窗口 int t=0; while(scanf("%d",&n)==1){ if(t) printf("\n"); //有点方便 单调队列 ...

  4. Java数据结构和算法(四)--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  5. table、tr、td表格的行、单元格等属性说明

    table.tr.td表格的行.单元格等属性说明 <table>标签定义HTML表格.简单的HTML表格由table元素以及一个或多个tr.th或td元素组成. tr元素定义表格行,th元 ...

  6. Mysql 访问远程数据库,报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

    参考:http://www.cnblogs.com/xyzdw/archive/2011/08/11/2135227.html 解决方法: 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在loc ...

  7. 在实现栈中原来功能的基础上,获得一个栈中最小值,要求时间复杂度 bigO(1)

    思路: 准备两个栈 stackData stackMin package my_basic; import java.util.Stack; public class GetMinStack { St ...

  8. JavaScript基础对象---Map

    一.创建Map对象 Map 对象保存键值对.任何值(对象或者原始值) 都可以作为一个键或一个值 1.构造函数 语法:new Map([iterable])参数:         iterable  可 ...

  9. 剑指Offer(书):二维数组中的查找

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  10. Java中线程的使用

    多线程的创建及启动 一.继承Thread类创建线程子类 1.在这子类中重写run方法,在run方法内写线程任务代码 2.创建该子类实例,即是创建了一个线程实例 3.调用该实例的start方法来启动该线 ...