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

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define P 1234567890
int a=;
int a2,a9,a3607,a3803,aP;
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int main()
{
freopen("lcm.in","r",stdin);
freopen("lcm.out","w",stdout);
char c=getchar();
while (c>=''&&c<='')
{
int x=c^;
a2=x&;
a9=(a9*+x)%;
a3607=(a3607*+x)%;
a3803=(a3803*+x)%;
aP=(10ll*aP+x)%P;
c=getchar();
}
if (a2) aP=2ll*aP%P;
if (a3607) aP=3607ll*aP%P;
if (a3803) aP=3803ll*aP%P;
if (a9)
if (a9%==) aP=3ll*aP%P;
else aP=9ll*aP%P;
cout<<aP;
return ;
}

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

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 1010
int n,m,f[N][N][][]; //head tail up 0 down 1
void inc(int &x,int y){x+=y;if (x>=m) x-=m;}
int main()
{
freopen("irrev.in","r",stdin);
freopen("irrev.out","w",stdout);
n=read(),m=read();
if (n==) {cout<<;return ;}
if (n==) {cout<<;return ;}
f[][][][]=,f[][][][]=,f[][][][]=,f[][][][]=;
for (int i=;i<n;i++)
for (int j=;j<=i-;j++)
for (int x=;x<=;x++)
for (int y=;y<=;y++)
{
if (x==) inc(f[i+][j][][y],f[i][j][x][y]);
else
{
inc(f[i+][j+][][y],f[i][j][x][y]);
inc(f[i+][j][][y],f[i][j][x][y]);
}
if (y==) inc(f[i+][j][x][],f[i][j][x][y]);
else
{
inc(f[i+][j+][x][],f[i][j][x][y]);
inc(f[i+][j][x][],f[i][j][x][y]);
}//head&&tail&&special check
if (j) inc(f[i+][j-][x][y],1ll*f[i][j][x][y]*j%m);
inc(f[i+][j+][x][y],1ll*f[i][j][x][y]*(i--j-(x==)-(y==))%m);
}
cout<<((f[n][][][]+f[n][][][])%m+(f[n][][][]+f[n][][][])%m)%m;
return ;
}

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

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 1050
#define P 100007
int n,m,a[N],f[][N],C[N],C0[][N],fac[][N],inv[][N];
int lucas(int x,int n,int m,int p)
{
if (m>n) return ;
if (n<p) return 1ll*fac[x][n]*inv[x][n-m]%p*inv[x][m]%p;
return 1ll*lucas(x,n%p,m%p,p)*lucas(x,n/p,m/p,p)%p;
}
void getC(int x,int p)
{
fac[x][]=;for (int i=;i<p;i++) fac[x][i]=1ll*fac[x][i-]*i%p;
inv[x][]=inv[x][]=;for (int i=;i<p;i++) inv[x][i]=p-1ll*(p/i)*inv[x][p%i]%p;
for (int i=;i<p;i++) inv[x][i]=1ll*inv[x][i-]*inv[x][i]%p;
for (int i=;i<=n;i++) C0[x][i]=lucas(x,m,i,p);
}
int getinv(int x,int y)
{
for (int i=;i<y;i++)
if (1ll*i*x%y==) return i;
}
void crt()
{
int a=getinv(,),b=getinv(,);
for (int i=;i<=n;i++)
C[i]=(1ll*C0[][i]*%P*b%P+1ll*C0[][i]*%P*a%P)%P;
}
int main()
{
freopen("difer.in","r",stdin);
freopen("difer.out","w",stdout);
n=read(),m=read();
for (int i=;i<=n;i++) a[i]=read();
getC(,);getC(,);
crt();
for (int i=;i<=n;i++) if (i&) C[i]=P-C[i];
for (int i=;i<=n;i++)
{
int x=;
for (int j=i;j>=&&i-j<=m;j--)
x=(x+1ll*C[i-j]*a[j]%P)%P;
cout<<x<<endl;
}
return ;
}

  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. C#数据流

    C#编程中数据流的使用一直不很熟练,没有一个系统的认识,但是它的重要性显然不言而喻.System.IO下的Stream类是所有数据流的基类,当我们对数据进行逐字节操作时,首先需要将数据转换为数据流.C ...

  2. ELKStack入门篇(二)之Nginx、Tomcat、Java日志收集以及TCP收集日志使用

    1.收集Nginx的json格式日志 1.1.Nginx安装 [root@linux-node1 ~]# yum install nginx -y [root@linux-node1 ~]# vim ...

  3. 集群服务器、负载均衡和session共享,C#的static变量

    集群服务器:是指由两台以上服务器共同组成的服务器,目的是为了提高性能. 负载均衡:是基于集群服务器实现的,作用是当A服务器访问数达到一定上限时,接下来客户端的请求会自动分配给B服务器,目的是减少服务器 ...

  4. Unity 编辑器扩展 Chapter2—Gizmos

    二. 使用Gizoms绘制网格及矩阵转换使用 1. 创建Leve类,作为场景控制类: using UnityEngine; //使用namespace方便脚本管理 namespace RunAndJu ...

  5. jvm之对象创建过程

    常量池中定位类的符号引用                ↓ 检查符号引用所代表的类是否已被加载,解析和初始化过  →                 ↓                        ...

  6. MongoDB 极简实践入门

    原作者StevenSLXie; 原链接(https://github.com/StevenSLXie/Tutorials-for-Web-Developers/blob/master/MongoDB% ...

  7. 使用Mininet创建网络拓扑

    使用Mininet创建Topo Python脚本实现创建拓扑 #coding:utf-8 from mininet.net import Mininet from mininet.topo impor ...

  8. 从零开始的Python学习Episode 13——常用模块

    模块 一.time模块 时间戳(timestamp) :时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 元组(struct_time)   :struct_time元组共有9 ...

  9. R之RMySQL

    linux,mysql和R的版本信息: Linux naci 3.19.0-16-generic #16-Ubuntu SMP Server version: 5.6.24-0ubuntu2 (Ubu ...

  10. [linux] reboot和shutdown-r的区别

    google看看: 先搜英文的资料 http://askubuntu.com/questions/441969/what-is-the-difference-between-reboot-and-sh ...