您的位置:首页 > 其它

BestCoder Round #74 (div.2) ~' T1. LCP Array ' 题解

2016-03-11 20:45 375 查看
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define MOD 1000000007
using namespace std;

int n=0,shu[100050],T,nex,gl;

int main()
{
scanf("%d",&T);

for(int nums=0;nums<T;nums++)
{
scanf("%d",&n);
long long ans=26;                             //初始有26种情况
for(int i=1;i<n;i++)
scanf("%d",shu+i);                        //读入,指针方式(或许可以装13).
shu
=0;                                     //第n位的操作!!
for(int i=1;i<=n;i++)                         //扫一遍队列
{
if(shu[i]!=shu[i-1]-1 && shu[i-1]!=0 )    //递减数列或者前一位为0
{
gl=1;
printf("0\n");                       //不合法直接0
break;
}
if(shu[i]==0 && i!=n)                     //为0则方法数*25 long long! long long!
{
ans%=MOD;
ans*=25;
ans%=MOD;
}
}
if(!gl) printf("%I64d\n",ans);                //不用说吧
gl=0;
nex=0;                                       //清零
}

return 0;
}


写这道题直接坑完了这一轮BC的时间(听说题挺难,只干T1都+100Rating),最后10分钟调出来的QAQ,差点废掉。好了废话结束,下面正题。

1.注意三种不合法情况的判断

1.  任何大于0的数后跟的一定是一个差为1的递减数列。
2.  最后一个数一定是0或1(不可能超长)。
3.  增长只能发生在0之后。


2.注意多组询问下的数组清空问题

1.  我的做法因为涉及数组第n位的判定,所以不能通过读入覆盖的方法解决。
2.  在int相乘时请使用 ```long long```


3.代码风格

1. 在帮同学调代码的时候简直看哭,自己看自己变量名也是恶心,为了以后更容易调所以用正常变量名吧23333.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: