根据条件,某些位置的数字就可以确定了。确定过程中如果有冲突,则无解。

如果B中出现了递增,C中出现了递减,则无解。

对于每一个未确定的a[i],ans需要更新,ans=ans*((c[i]-b[i]+1)-(i-1))%MOD;

如果计算ans过程中,出现了(c[i]-b[i]+1)-(i-1)<=0,则也是无解。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std; long long MOD=;
const int maxn=+;
int T,n;
int a[maxn],b[maxn],c[maxn];
int tmp1[maxn],tmp2[maxn];
bool f[maxn];
long long h[maxn]; int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&b[i]);
for(int i=;i<=n;i++) scanf("%d",&c[i]); memset(a,-,sizeof a);
memset(tmp1,-,sizeof tmp1);
memset(tmp2,-,sizeof tmp2); tmp1[]=b[];
for(int i=;i<=n;i++) if(b[i]<b[i-]) tmp1[i]=b[i]; tmp2[]=c[];
for(int i=;i<=n;i++) if(c[i]>c[i-]) tmp2[i]=c[i]; bool fail=;
for(int i=;i<=n;i++)
if(tmp1[i]!=-&&tmp2[i]!=-&&tmp1[i]!=tmp2[i]) fail=; for(int i=;i<=n;i++) if(b[i]>b[i-]||c[i]<c[i-]) fail=; if(fail) { printf("0\n"); continue;} for(int i=;i<=n;i++)
{
if(tmp1[i]!=-) a[i]=tmp1[i];
if(tmp2[i]!=-) a[i]=tmp2[i];
} long long ans=;
for(int i=;i<=n;i++)
{
if(a[i]!=-) continue;
if((c[i]-b[i]+)-(i-)<=) ans=;
ans=ans*((c[i]-b[i]+)-(i-))%MOD;
}
printf("%lld\n",ans);
}
return ;
}

HDU 5719 Arrange的更多相关文章

  1. hdu 5719 Arrange 贪心

    Arrange Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Proble ...

  2. hdu 5719(Arrange)(冷静分析)

    A数组显示从0到i的最小值B数组显示从0到i的最大值由此可得:A数组是单调不增的(怎么也会不使得最小值变大)B数组是单调不减的.设premin和premax为i位以前的最小值和最大值.可以得出以下几点 ...

  3. hdu 5719 BestCoder 2nd Anniversary B Arrange 简单计数问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5719 题意:一个数列为1~N的排列,给定mn[1...n]和mx[1...n],问有符合的排列数为多少 ...

  4. BestCoder 2nd Anniversary/HDU 5719 姿势

    Arrange Accepts: 221 Submissions: 1401 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/2 ...

  5. HDU 3743 Frosh Week (线段树+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3743 Frosh Week Time Limit : 2000/1000ms (Java/Other) ...

  6. HDU 1712 分组背包

    ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  7. HDU 1043 & POJ 1077 Eight(康托展开+BFS+预处理)

    Eight Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30176   Accepted: 13119   Special ...

  8. HDU 5835 Danganronpa(弹丸论破)

     Danganronpa(弹丸论破) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  9. hdu 1043 Eight 经典八数码问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 The 15-puzzle has been around for over 100 years ...

随机推荐

  1. redis数据类型:lists

    redis的list类型其实就是一个每个子元素都是string类型的双向链表. 我们可以通过push,pop操作从链表的头部或者尾部添加删除元素,这样list即可以作为 栈,又可以作为队列. lpus ...

  2. 让ECSHOP模板支持转smarty时间戳

    找到includes/cls_template.php 在大约640行,加入: case 'time': $p = 'date("Y-m-d H:i:s",' . $p . ')' ...

  3. Python mining

    1.pandas,使用pycharm安装  http://bbs.pinggu.org/thread-3633477-1-1.html 2.eric4 快捷键 http://blog.csdn.net ...

  4. java链表实现快排

    链表文件 package sort; public class SqList {    public int LIST_INIT_SIZE = 8;//链表的原始大小    private int I ...

  5. windows做时间服务器,linux和windows时间同步

    找了很多的资料,都没有windows做时间服务,linux同步windows的时间的,最后自己找了一些软件,终于搞定了,写出来给大家共享,以免大家多走弯路 首先在http://www.meinberg ...

  6. MFC中MessageBeep与sndPlaySound播放声音函数使用

    MessageBeep(0x00000000L);    //用来播放系统默认音频文件,如0x00000000L为系统提示音,具体音频对应规则,请参照MSDN. sndPlaySound函数用来播放指 ...

  7. 如何使用SecureCRT连接ubuntu

    1. 首先要明白什么是ssh? 可以把ssh看做是telnet的加强版,telnet的密码和信息都是不加密的,而ssh则加密. .2. 开启ubuntu上的ssh功能 先安装,安装后就自动开启了. s ...

  8. leetcode70

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  9. H5的新应用-在地图上标识附近加油站的地址

    ------------------------ <style type="text/css">          html{height:100%}         ...

  10. spark java 代码example

    https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples