zoukankan      html  css  js  c++  java
  • BestCoder 2nd Anniversary 1002 Arrange

    排除所有不符合条件后根据当前位置上下界计算,

    由于前面取的数肯定在之后的区间内,所以去掉已取的个数即可。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 #define LL __int64
     6 const int N=100005;
     7 const LL mod=998244353;
     8 int t,n,num,b[N],c[N]; 
     9 bool flag;
    10 LL ans;
    11 int main()
    12 {
    13     scanf("%d",&t);
    14     while(t--)
    15     {
    16         scanf("%d",&n);
    17         for(int i=0;i<n;i++) scanf("%d",&b[i]);
    18         for(int i=0;i<n;i++) scanf("%d",&c[i]);
    19         if(b[0]!=c[0]) 
    20         {
    21             puts("0"); continue;
    22         }
    23         flag=0;
    24         num=ans=1;
    25         for(int i=1;i<n;i++)
    26         {
    27             if(b[i]!=b[i-1]&&c[i]!=c[i-1] || b[i-1]<b[i] || c[i-1]>c[i])//不符合条件 
    28             {
    29                 flag=1; break;
    30             }
    31             else if(c[i]!=c[i-1]||b[i]!=b[i-1]) num++; //已确定的数字数+1 
    32             else
    33             {
    34                 ans=(ans*(c[i]-b[i]+1-num))%mod;//该位上未确定的数字中的符合条件的个数 
    35                 num++;//已确定的数字数+1 
    36             } 
    37         }
    38         if(flag)
    39         {
    40             puts("0"); continue;
    41         }
    42         printf("%I64d
    ",ans);
    43     }
    44 } 
    45 /*
    46 2
    47 5
    48 4 4 1 1 1
    49 4 5 5 5 5
    50 */
    我自倾杯,君且随意
  • 相关阅读:
    团队开发冲刺日(十三)
    第十周总结
    团队开发冲刺日(十二)
    团队开发冲刺日(十一)
    团队开发冲刺日(十)
    团队开发冲刺日(九)
    团队开发冲刺日(八)
    团队开发冲刺日(七)
    团队开发冲刺日(六)
    课后作业1
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/5683207.html
Copyright © 2011-2022 走看看