jzoj 2546. 【NOIP2011模拟9.3】遥控车
2016-08-12 14:29
375 查看
题目描述
平平带着韵韵来到了游乐园,看到了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 是唯一确定的。一辆车可以玩多次。
输入
第一行是2 个正整数n、m。接下来n 行,每行1 个字符串name[i],表示第i 辆车的名字。接下来m 行,每行1 个字符串s,表示韵韵想要的名字。
输出
第一行输出韵韵能玩的次数。第二行输出共有多少种可能的排列。思路
前一个问题很简单,就是字符串的简单运用,后一问是n-1的高精度斐波那契数列,所以这题就很简单了,但要注意时间如果直接进行字符操作的话会超时,所以我们可以根据字符串的长度进行一次排序,如果想要的名字长度比车的名字长度要大的话就可以直接结束了
var a,b:Array [0..100001,1..10] of longint; f:array [0..100020] of longint; 4000 num:array [1..10] of longint; n,i,j,time,x:longint; procedure qsort(l,r,x:longint); vari,j,mid,temp:longint; begin ifl>=r then exit; mid:=a[l+random(r-l+1),x]; i:=l; j:=r; repeat while a[i,x]>mid do inc(i); while a[j,x]<mid do dec(j); ifi<=j then begin temp:=a[i,x]; a[i,x]:=a[j,x]; a[j,x]:=temp; inc(i); dec(j); end; until i>j; qsort(l,j,x); qsort(i,r,x); end; begin readln(n,time); fori:=1 to n do begin read(x); inc(num[x]); read(a[num[x],x]); end; fori:=1 to 10 do qsort(1,num[i],i); fori:=0 to time do begin for j:=1 to 10 do begin if b[i,j]<num[j] then begin if f[i+j]<f[i]+a[b[i,j]+1,j] then begin f[i+j]:=f[i]+a[b[i,j]+1,j]; b[i+j]:=b[i]; b[i+j,j]:=b[i,j]+1; end; end; end; end; write(f[time]); end.
相关文章推荐
- POJ - 1743 - Musical Theme(后缀数组 - 不可重叠最长重复子串)
- Volley StringRequest和JSONObjectRequest使用几个细节
- Codeforces Round #338 (Div. 2)D. Multipliers【费马小定理+组合数学】
- 安装要点记录
- cephfs kernel client针对dir的file_operations操作
- 从零学React Native之08Image组件
- vue+node开发手机端h5页面开发遇到的坑
- update-java-alternatives 更改默认Java环境
- 关于div居中
- pthread_join和pthread_detach详解
- Struts2.3,<s:iterator>,<c:forEach>遍历map中的list集合
- 使用opencv读取图像序列
- jade 学习笔记
- OLTP和OLAP有何区别?
- 面向对象的程序设计特征
- ffmpeg基本用法(转)
- cephfs kernel client针对dir的inode操作
- web.config访问走代理的配置
- ReentrantLock获取锁方式解读(转)
- app退出后,点击推送进入指定页面