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. NYOJ 299

    (前言:这是一道关于矩阵快速幂的问题,介绍矩阵快速幂之前,首先看"快速幂"问题. 在前面的博客里有记录到快速幂取模算法,不过总体的思想总是和取模运算混淆在一起,而忽略了" ...

  2. GrowingIO 2016 数据驱动增长大会—— 一起做增长英雄

    GrowingIO 2016 数据驱动增长大会,首次聚齐了增长黑客之父 Sean Ellis .世界前十位前沿数据科学家张溪梦等数十位中美顶尖增长实践者: 链家.点融网.Camera360.量化派.北 ...

  3. 三星首次更新Gear VR虚拟现实浏览器

    通过VR浏览网页不是问题,不过你需要一个专门的VR浏览器,而GearVR的虚拟现实应用名为"Samsung Internet for Gear VR".继去年12月份上线后,迎来了 ...

  4. dplyr 数据操作 常用函数(3)

    接下了我们继续了解dplyr中有用的函数 1.if_else() if_else主要用于在数据做判断用 x<-data.frame(id=1:6, name=c("wang" ...

  5. Abstraction elimination

    (本文不保证不误人子弟,切勿轻信) Unlambda指的是lambda计算中去掉lambda操作(does not have lambda(or abstraction) operation of t ...

  6. Chapter 21_1 字符串函数

    接下来开始接触Lua强大的字符串处理能功能——字符串库. 原始的Lua解释器操作字符串的能力很有限,真正强大的能力还是来自字符串库. 它所有的函数都在模块string中.它还为strings设置了一个 ...

  7. C#中XmlSerializer的内存占用问题

    被XmlSerializer掉坑里了,爬了一晚上才出来. 本来实现一个功能,从数据库中查出一堆数据(比较多,几十万,不过,是分批查出来的),查出来的数据包含了一个XML字符串,代码中对其进行序列化,一 ...

  8. 转:【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链

    [译]Asp.net MVC 利用自定义RouteHandler来防止图片盗链   你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你 ...

  9. 总结的OSM 地图相关的分析

    How OSM works:  Tile Format: png,  z: levels [0- 18], x: Latitude [0- ], y: Longitude [0- ];         ...

  10. ERROR Worker: All masters are unresponsive! Giving up

    启动spark的时候发现,主节点(master)上的Master进程还在,子节点(Worker)上的Worker进程自动关闭. 在子节点上查询log发现: ERROR Worker: All mast ...