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. [2016北京集训测试赛7]isn-[树状数组+dp+容斥]

    Description Solution 定义dp[i][j]为在1到i个数中选了j个数,并且保证选了i的选法总数. dp[i][j]为所有满足A[k]>A[i]的k(k<i)的dp[k] ...

  2. 前端 CDNJS 库及 Google Fonts、Ajax 和 Gravatar 国内加速服务

    由于某些众所周知的原因,好多开源的 JS 库采用的国外 CDN 托管方式在国内访问速度不如人意.所以我们特意制作了这个公益项目,托管了 CDNJS 的所有开源 JS 库以及反代了 Google Fon ...

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

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

  4. C、C++字符操作归总

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  5. 131. 分割回文串 javascript实现

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...

  6. Could not resolve placeholder 'jdbc.url' in value "${jdbc.url}"

    写完接口之后,发现报了这个错误,查了一下发现,spring不允许使用两个 <context:property-placeholder>

  7. 简单主机批量管理工具(这里实现了paramiko 用su切换到root用户)

    项目名:简单主机批量管理工具 一.需求 1.主机分组 2.可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run  -h h1,h2,h3   -g web_clusters,db_ ...

  8. os模块大全详情

    python常用模块目录 一:os模块分类: python os.walk详解 二:os模块大全表 序号 方法 方法 1 os.access(path, mode) 检验权限模式 2 os.chdir ...

  9. 四种方式实现波浪效果(CSS效果)

    一)第一种方法 (1)HTML结构 <body> <div class="animate wave"> <div class="w1&quo ...

  10. Python如何对折线进行平滑曲线处理?

    在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理: 实现所需的库 numpy.scipy.mat ...