Description
平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i]。韵韵早就迫不及待地想玩名字是s的遥控车。可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀(也就是说能确定一个i,使s是name[i]的前缀),这时她就能玩第i辆车;或者是一个无中生有的名字,即s不是任何一辆车名字的前缀,这时候她什么也不能玩。
你需要完成下面的任务:
1.韵韵想了m个她想要的名字,请告诉她能玩多少次。
2.由于管理员粗心的操作,导致每辆车的摆放位置都可能出现微小的差错,原来第i辆车现在的位置可能是i-1、i、i+1中的任意一个(第1辆车的位置不可能是0,第n辆车的位置不可能是n+1)。请你计算出共有多少种可能的排列。
注:数据保证当s是name[i]的前缀时,i是唯一确定的。一辆车可以玩多次。
你需要完成下面的任务:
1.韵韵想了m个她想要的名字,请告诉她能玩多少次。
2.由于管理员粗心的操作,导致每辆车的摆放位置都可能出现微小的差错,原来第i辆车现在的位置可能是i-1、i、i+1中的任意一个(第1辆车的位置不可能是0,第n辆车的位置不可能是n+1)。请你计算出共有多少种可能的排列。
注:数据保证当s是name[i]的前缀时,i是唯一确定的。一辆车可以玩多次。
Input
第一行是2个正整数n、m。
接下来n行,每行1个字符串name[i],表示第i辆车的名字。
接下来m行,每行1个字符串s,表示韵韵想要的名字。
接下来n行,每行1个字符串name[i],表示第i辆车的名字。
接下来m行,每行1个字符串s,表示韵韵想要的名字。
Output
第一行输出韵韵能玩的次数。
第二行输出共有多少种可能的排列。
第二行输出共有多少种可能的排列。
Sample Input
4 4 Abcd DeF AAa aBccc Ab AA AbC aBcc
Sample Output
3 5
Data Constraint
Hint
【数据规模和约定】
对于题目涉及到的字符串严格区分大小写,且长度小于255。
对于20%的数据 n≤10,m≤10;
对于40%的数据 n≤1000,m≤1000;
对于100%的数据 n≤10000,m≤10000。
对于题目涉及到的字符串严格区分大小写,且长度小于255。
对于20%的数据 n≤10,m≤10;
对于40%的数据 n≤1000,m≤1000;
对于100%的数据 n≤10000,m≤10000。
分析
关于着前缀,我本想用字典树的
结果MLE。。。无奈,就用了stupid的二分法
然后第二问打波表发现是斐波那契,加高精度即可
![[高精度][二分]JZOJ 1207 遥控车](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
#pragma GCC optimize(2) #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; string s[10001]; int cnt; int n,m; bool Bin_Search(string a) { int l=1,r=n; while (l<=r) { int mid=l+r>>1; if (s[mid]>a) r=mid-1; else l=mid+1; } return !s[l].find(a,0); } int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) cin>>s[i]; int ans1=0; sort(s+1,s+n+1); for (int i=1;i<=m;i++) { string a; cin>>a; ans1+=Bin_Search(a); } printf("%d\n",ans1); int a[10001],b[10001],c[10001]; memset(a,0,sizeof a); memset(b,0,sizeof b); memset(c,0,sizeof c); a[1]=1;b[1]=2;b[0]=1; if (n<=3) printf("%d",n==1?1:(n==2?1:2)); for (int i=1;i<=n-2;i++) { for (int j=1;j<=b[0];j++) { c[j]=a[j]+b[j]+c[j]; c[j+1]=c[j]/10; c[j]%=10; } if (c[b[0]+1]>0) ++b[0]; for (int j=1;j<=b[0];j++) { a[j]=b[j]; b[j]=c[j];c[j]=0; } } for (int i=b[0];i;i--) printf("%d",b[i]); }
View Code
转载于:https://www.cnblogs.com/mastervan/p/9699165.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101401.html原文链接:https://javaforall.net
