A:注意到模数是要求lcm的数的倍数,直接先取模就可以了。考场脑抽,对其质因数分解判了一下每个因子有没有,当然也行。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. int read()
  9. {
  10. int x=,f=;char c=getchar();
  11. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  12. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  13. return x*f;
  14. }
  15. #define P 1234567890
  16. int a=;
  17. int a2,a9,a3607,a3803,aP;
  18. int gcd(int n,int m){return m==?n:gcd(m,n%m);}
  19. int main()
  20. {
  21. freopen("lcm.in","r",stdin);
  22. freopen("lcm.out","w",stdout);
  23. char c=getchar();
  24. while (c>=''&&c<='')
  25. {
  26. int x=c^;
  27. a2=x&;
  28. a9=(a9*+x)%;
  29. a3607=(a3607*+x)%;
  30. a3803=(a3803*+x)%;
  31. aP=(10ll*aP+x)%P;
  32. c=getchar();
  33. }
  34. if (a2) aP=2ll*aP%P;
  35. if (a3607) aP=3607ll*aP%P;
  36. if (a3803) aP=3803ll*aP%P;
  37. if (a9)
  38. if (a9%==) aP=3ll*aP%P;
  39. else aP=9ll*aP%P;
  40. cout<<aP;
  41. return ;
  42. }

  B:学傻系列。排列计数一般将数从小到大加进去考虑,于是设f[i][j]为i个数的排列其中有j个位置不合法的方案数,考虑每次往里加i+1,可以发现如果在上升段每个数的左侧或下降段每个数的右侧插入会使不合法位置--,反之则++。特殊情况是开头的下降段和结尾的上升段,于是增加二维01记录。正解考虑最大值出现位置于是变成了优美的卷积形式。当然原题n只有1000我的辣鸡dp也能A了。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. int read()
  9. {
  10. int x=,f=;char c=getchar();
  11. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  12. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  13. return x*f;
  14. }
  15. #define N 1010
  16. int n,m,f[N][N][][]; //head tail up 0 down 1
  17. void inc(int &x,int y){x+=y;if (x>=m) x-=m;}
  18. int main()
  19. {
  20. freopen("irrev.in","r",stdin);
  21. freopen("irrev.out","w",stdout);
  22. n=read(),m=read();
  23. if (n==) {cout<<;return ;}
  24. if (n==) {cout<<;return ;}
  25. f[][][][]=,f[][][][]=,f[][][][]=,f[][][][]=;
  26. for (int i=;i<n;i++)
  27. for (int j=;j<=i-;j++)
  28. for (int x=;x<=;x++)
  29. for (int y=;y<=;y++)
  30. {
  31. if (x==) inc(f[i+][j][][y],f[i][j][x][y]);
  32. else
  33. {
  34. inc(f[i+][j+][][y],f[i][j][x][y]);
  35. inc(f[i+][j][][y],f[i][j][x][y]);
  36. }
  37. if (y==) inc(f[i+][j][x][],f[i][j][x][y]);
  38. else
  39. {
  40. inc(f[i+][j+][x][],f[i][j][x][y]);
  41. inc(f[i+][j][x][],f[i][j][x][y]);
  42. }//head&&tail&&special check
  43. if (j) inc(f[i+][j-][x][y],1ll*f[i][j][x][y]*j%m);
  44. inc(f[i+][j+][x][y],1ll*f[i][j][x][y]*(i--j-(x==)-(y==))%m);
  45. }
  46. cout<<((f[n][][][]+f[n][][][])%m+(f[n][][][]+f[n][][][])%m)%m;
  47. return ;
  48. }

  C:找规律容易发现系数是组合数。(伪)扩展lucas或者质因数分解都可以。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. int read()
  9. {
  10. int x=,f=;char c=getchar();
  11. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  12. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  13. return x*f;
  14. }
  15. #define N 1050
  16. #define P 100007
  17. int n,m,a[N],f[][N],C[N],C0[][N],fac[][N],inv[][N];
  18. int lucas(int x,int n,int m,int p)
  19. {
  20. if (m>n) return ;
  21. if (n<p) return 1ll*fac[x][n]*inv[x][n-m]%p*inv[x][m]%p;
  22. return 1ll*lucas(x,n%p,m%p,p)*lucas(x,n/p,m/p,p)%p;
  23. }
  24. void getC(int x,int p)
  25. {
  26. fac[x][]=;for (int i=;i<p;i++) fac[x][i]=1ll*fac[x][i-]*i%p;
  27. inv[x][]=inv[x][]=;for (int i=;i<p;i++) inv[x][i]=p-1ll*(p/i)*inv[x][p%i]%p;
  28. for (int i=;i<p;i++) inv[x][i]=1ll*inv[x][i-]*inv[x][i]%p;
  29. for (int i=;i<=n;i++) C0[x][i]=lucas(x,m,i,p);
  30. }
  31. int getinv(int x,int y)
  32. {
  33. for (int i=;i<y;i++)
  34. if (1ll*i*x%y==) return i;
  35. }
  36. void crt()
  37. {
  38. int a=getinv(,),b=getinv(,);
  39. for (int i=;i<=n;i++)
  40. C[i]=(1ll*C0[][i]*%P*b%P+1ll*C0[][i]*%P*a%P)%P;
  41. }
  42. int main()
  43. {
  44. freopen("difer.in","r",stdin);
  45. freopen("difer.out","w",stdout);
  46. n=read(),m=read();
  47. for (int i=;i<=n;i++) a[i]=read();
  48. getC(,);getC(,);
  49. crt();
  50. for (int i=;i<=n;i++) if (i&) C[i]=P-C[i];
  51. for (int i=;i<=n;i++)
  52. {
  53. int x=;
  54. for (int j=i;j>=&&i-j<=m;j--)
  55. x=(x+1ll*C[i-j]*a[j]%P)%P;
  56. cout<<x<<endl;
  57. }
  58. return ;
  59. }

  result:300 rank1

Contest 1的更多相关文章

  1. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

  2. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. 2016 Multi-University Training Contest 2 D. Differencia

    Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  4. 2016 Multi-University Training Contest 1 G. Rigid Frameworks

    Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  5. hdu-5988 Coding Contest(费用流)

    题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  6. ZOJ 3703 Happy Programming Contest

    偏方记录背包里的物品.....每个背包的价值+0.01 Happy Programming Contest Time Limit: 2 Seconds      Memory Limit: 65536 ...

  7. 2012 Multi-University Training Contest 9 / hdu4389

    2012 Multi-University Training Contest 9 / hdu4389 打巨表,实为数位dp 还不太懂 先这样放着.. 对于打表,当然我们不能直接打,这里有技巧.我们可以 ...

  8. 2014 Multi-University Training Contest 9#11

    2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others)   ...

  9. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  10. 校际联合Contest

    每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...

随机推荐

  1. Object重写equals()、hashcode()方法的原因

    一.问题 在我们新建java对象的时候,如果后期用到对象比较,就必须重写equals(0.hashcode()方法 为什么必须重写这两个方法? 只是比较相等的话,重写equals()方法不就可以吗?为 ...

  2. 【LG5017】[NOIP2018pj]摆渡车

    [LG5017][NOIP2018pj]摆渡车 题面 洛谷 题解 震惊!普及组竟然考斜率优化??? 当然有其他的方法 首先我们转化一下模型 此题可以变为: 在一根时间轴上有一些点,每个时间点\(i\) ...

  3. URL特别字符处理

    import time,os,datetimeimport urllib3utcNow = datetime.datetime.utcnow()fifteen = utcNow +datetime.t ...

  4. 我们一起学习WCF 第九篇聊天功能

    说到聊天,那么其实就是传输数据,把自己写的东西传给自己想发送的那么人.我总结一下传输常见的有三种方式 1:就是我们常见的数据库传输 2:就是文件(流)传输 3:就是socket传输 今天我们说的wcf ...

  5. Maven学习(十一)-----使用Maven创建Web应用程序项目

    使用Maven创建Web应用程序项目 用到的技术/工具: Maven 3.3.3 Eclipse 4.3 JDK 8 Spring 4.1.1.RELEASED Tomcat 7 Logback 1. ...

  6. sqlserver(2012)清理tempdb

    当数据库运行时间长了之后,tempdb变得特别大,几十G,受不了啊:当然我们知道重启 SQL Server服务的话,tempdb数据库会自动重新创建的,从而使 tempdb 回归到初始大小.但是这是生 ...

  7. 用Python深入理解跳跃表原理及实现

    最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的.第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料.其中,网上有部分文章是按照如下方式描述跳跃表的: ...

  8. 小白初识 - 基数排序(RadixSort)

    基数排序算是桶排序和计数排序的衍生吧,因为基数排序里面会用到这两种其中一种. 基数排序针对的待排序元素是要有高低位之分的,比如单词adobe,activiti,activiti就高于adobe,这个是 ...

  9. JY播放器【QQ音乐破解下载】

    今天给大家带来一款神器----JY播放器.可以直接下载QQ音乐的歌曲. 目前已经支持平台(蜻蜓FM.喜马拉雅FM.网易云音乐.QQ音乐) 使用方法: 在网页打开QQ音乐网站找到你要听的歌曲或歌单.复制 ...

  10. ThinkPHP - 6 - 学习笔记(2015.5.4)

    解决:OneThink 站点无法被友言uyan后台识别 打开友言uyan插件功能,但OneThink站点无法被友言uyan后台检测到.页面生成的uyan代码为: <!-- UY BEGIN -- ...