1001 Expression

式子不好推啊。见官方题解

式子知道就方便了。处理好组合数和阶乘。

按区间长度从小到大递推完就好。

 # include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
# define maxn
typedef long long LL;
const LL mod=1e9+;
LL fac[maxn]={},C[maxn][maxn];
LL a[maxn],dp[maxn][maxn];
char op[maxn]; int main(void)
{
for(int i=;i<maxn;i++) fac[i]=(fac[i-]*(LL)i)%mod;
for(int i=;i<maxn;i++) C[i][]=(LL);
for(int i=;i<maxn;i++)
for(int j=;j<=i;j++)
C[i][j]=(C[i-][j]+C[i-][j-])%mod;
int n;
while(~scanf("%d",&n))
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++) scanf("%I64d",a+i);
scanf("%s",op+);
for(int i=;i<=n;i++) dp[i][i]=a[i];
for(int len=;len<=n;len++)
{
for(int s=;s+len-<=n;s++)
{
for(int m=s;m<s+len-;m++)
{
LL tem;
if(op[m]=='*') tem=dp[s][m]*dp[m+][s+len-];
else if(op[m]=='+') tem=dp[s][m]*fac[s+len-m-]+dp[m+][s+len-]*fac[m-s];
else tem=dp[s][m]*fac[s+len-m-]-dp[m+][s+len-]*fac[m-s];
dp[s][s+len-]+=tem%mod*C[len-][m-s]%mod;
}
dp[s][s+len-]=(dp[s][s+len-]%mod+mod)%mod;
}
}
printf("%I64d\n",dp[][n]);
}
return ;
}

Aguin

1002 Hack it!

1003 GCD Tree

1004 Too Simple

果然还是图样。置换顺序乘反了。

比赛wa到底。拿了数据才知道错在哪。 QAQ。

 # include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
int a[][],vis[];
LL fac[]={}; LL qpow(LL a,int b)
{
LL d=(LL),t=a;
while(b)
{
if(b%) d=(d*t)%mod;
b/=;
t=(t*t)%mod;
}
return d;
} int main(void)
{
for(int i=;i<=;i++) fac[i]=(fac[i-]*LL(i))%mod;
int n,m;
while(~scanf("%d%d",&n,&m))
{
int ok=,cnt=;
for(int i=;i<=m;i++)
{
scanf("%d",&a[i][]);
if(a[i][]==-) cnt++;
else
{
for(int j=;j<=n;j++) scanf("%d",&a[i][j]);
memset(vis,,sizeof(vis));
for(int j=;j<=n;j++) vis[a[i][j]]++;
for(int j=;j<=n;j++) if(vis[j]!=) ok=;
}
}
if(!cnt) for(int i=;i<=n;i++)
{
int pos=i;
for(int j=m;j>;j--) pos=a[j][pos];
if(pos!=i) ok=;
}
if(!ok) puts("");
else
{
LL ans=;
if(cnt) ans=qpow(fac[n],cnt-);
printf("%I64d\n",ans);
}
}
return ;
}

Aguin

1005 Arithmetic Sequence

以每个点为i。处理一下向前向后能延伸的最大距离。

d1≠d2时。答案为sigma(pre[i]*suf[i])。

d1=d2时。pre[i]相当于以i为右端点的区间数。答案为sigma(pre[i])。

 # include <iostream>
# include <cstdio>
using namespace std;
typedef long long LL;
const int maxn=;
int a[maxn],pre[maxn],suf[maxn]; int main(void)
{
int n,d1,d2;
while(~scanf("%d%d%d",&n,&d1,&d2))
{
for(int i=;i<=n;i++) scanf("%d",a+i);
pre[]=; suf[n]=;
for(int i=;i<=n;i++)
{
if(a[i]==a[i-]+d1) pre[i]=pre[i-]+;
else pre[i]=;
}
for(int i=n-;i>;i--)
{
if(a[i]==a[i+]-d2) suf[i]=suf[i+]+;
else suf[i]=;
}
LL ans=;
if(d1==d2) for(int i=;i<=n;i++) ans+=(LL)pre[i];
else for(int i=;i<=n;i++) ans+=(LL)pre[i]*(LL)suf[i];
printf("%I64d\n",ans);
}
return ;
}

Aguin

1006 Persistent Link/cut Tree

1007 Travelling Salesman Problem

n或者m为奇数时必然能走完。

全偶数时选择行标加列标为奇数的格子中最小的格子不走。其余都能走。

(因为是从偶数格子出发到偶数格子终止的。所以不存在只选一个行标加列标为偶数的格子不走。其他格子都走的情况。)

具体做法是。设选中格子坐标为(i,j)。如果i为奇。可以先走到(i,j-1)。再绕过选中格子。绕到(i,j+2)。就转变为一边为奇数的情况了。

同理i为偶数先走到(i-1,j)。绕到(i+2,j)。按奇数边的走完。

要注意选中格子i==n或者j==m的情况要特判一下。

【代码丑- -】

 # include <iostream>
# include <cstdio>
using namespace std;
# define INF
int n,m,map[][]; void Print_char(int len,char c)
{
for(int i=;i<len;i++) putchar(c);
} void ans_print(int x,int y)
{
if((n-x)%==)
{
int len=m-y;
for(int i=x;i<n;i+=)
{
Print_char(len,'R');
putchar('D');
Print_char(len,'L');
putchar('D');
}
Print_char(len,'R');
}
else
{
int len=n-x;
for(int i=y;i<m;i+=)
{
Print_char(len,'D');
putchar('R');
Print_char(len,'U');
putchar('R');
}
Print_char(len,'D');
}
printf("\n");
return;
} int main(void)
{
while(~scanf("%d%d",&n,&m))
{
int sum=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%d",&map[i][j]);
sum+=map[i][j];
}
}
if(n%||m%)
{
printf("%d\n",sum);
ans_print(,);
continue;
}
int Min=INF,x,y;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if((i+j)%==&&map[i][j]<Min)
{Min=map[i][j];x=i;y=j;}
printf("%d\n",sum-Min);
int xx=,yy=;
if(x%==)
{
while(xx<x-)
{
int len=m-yy;
Print_char(len,'R');
putchar('D');
Print_char(len,'L');
putchar('D');
xx+=;
}
while(yy<y)
{
int len=n-xx;
Print_char(len,'D');
putchar('R');
Print_char(len,'U');
putchar('R');
yy+=;
}
if(x<n)
{
Print_char(m-yy,'R');
putchar('D');
for(int i=m;i>yy;i--)
{
if((i-yy)%) printf("DL");
else printf("UL");
}
putchar('D');
ans_print(x+,y);
}
else
{
putchar('R');
ans_print(x-,y+);
}
}
else
{
while(xx<x)
{
int len=m-yy;
Print_char(len,'R');
putchar('D');
Print_char(len,'L');
putchar('D');
xx+=;
}
while(yy<y-)
{
int len=n-xx;
Print_char(len,'D');
putchar('R');
Print_char(len,'U');
putchar('R');
yy+=;
}
if(y<m)
{
Print_char(n-x,'D');
putchar('R');
for(int i=n;i>xx;i--)
{
if((i-xx)%) printf("RU");
else printf("LU");
}
putchar('R');
ans_print(x,y+);
}
else
{
putchar('D');
ans_print(x+,y-);
}
}
}
return ;
}

Aguin

1008 Goldbach's Conjecture

1009 Random Inversion Machine

1010 Sometimes Naive

2015 Multi-University Training Contest 9的更多相关文章

  1. 2015 Multi-University Training Contest 8 hdu 5390 tree

    tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...

  2. 2015 UESTC Winter Training #8【The 2011 Rocky Mountain Regional Contest】

    2015 UESTC Winter Training #8 The 2011 Rocky Mountain Regional Contest Regionals 2011 >> North ...

  3. 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】

    2015 UESTC Winter Training #7 2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest 据 ...

  4. Root(hdu5777+扩展欧几里得+原根)2015 Multi-University Training Contest 7

    Root Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Su ...

  5. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

  6. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  7. hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)

    OO's Sequence                                                          Time Limit: 4000/2000 MS (Jav ...

  8. HDU5294 Tricks Device(最大流+SPFA) 2015 Multi-University Training Contest 1

    Tricks Device Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  9. hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)

    CRB and Tree                                                             Time Limit: 8000/4000 MS (J ...

  10. 2015多校联合训练赛 hdu 5308 I Wanna Become A 24-Point Master 2015 Multi-University Training Contest 2 构造题

    I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 ...

随机推荐

  1. XTU 1243 2016

    $2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$A$题 循环节. 循环节为$2016$,从数据范围以及题目中的一句话也能间接的体会出应该是有循环节的,并且循环节可能是$2016$. Feel ...

  2. 拒绝深坑!记录找了多半天时间的C++编译失败的错误

    采用新的源码,和原来的服务改动也不是很大,但是拒绝深坑啊,找了半天以为是源码的问题,结果倒好原来是环境的问题,还是要感谢一个神一样的人物的帮助 编译的时候一直出现undefined reference ...

  3. 【NOIP2006提高组】能量项链

    说好的好好写人话的题解 嗯很多题解都说过这是一个石子合并的模型它也确实就是一个石子合并的模型.然而就算这样我也不会写最后仍然写了个记忆化搜索 首先我们不论环状,就直接一条链型,当只剩下两个珠子的时候, ...

  4. Python学习笔记——基础篇【第五周】——正则表达式(re)

    目录 1.简介 2.字符匹配 1.简介:就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译 ...

  5. hdu 2087 剪花布条 kmp模板题

    也是kuangbin专题的 专题名字太长 不复制了…… 刚好数据结构也学了kmp 找一道题敲敲模板…… 暴力的字符串匹配是O(n*m)的时间复杂度 而kmp通过一个O(m)的预处理将字符串匹配的时间复 ...

  6. 使用NCoding归档进行存储数据时候报错

    问题:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Demo1.UserInfo ...

  7. informix数据迁移工具使用介绍

    一.dbschema  USAGE:     dbschema [-q] [-t tabname] [-s user] [-p user] [-r rolename] [-f procname]    ...

  8. .net导出不规则Excel

    using Hamp.App.BLL; using Hamp.App.Model; using Hamp.App.Model.QualityManagement; using System; usin ...

  9. iOS开发之视差滚动视图

    首先声明一点,由于自己iOS开发经验有限,这里给下面将要实现的效果起名叫视差滚动视图,自己也不知道是否严谨,等以后有经验了,再来更新吧. 一.需求 有的时候我们可能会有这样一种需求,在一个UITabl ...

  10. GitHub上优秀的ThirdParty

    仅为个人记录. 1.SwiftyJSON GitHub地址:https://github.com/SwiftyJSON/SwiftyJSON 2.CryptoSwift GitHub地址:https: ...