比GCJ简单多了,题目大都很暴力(虽然最后一题还是不大会)
A. Lazy Spelling Bee
给一个字符串$a$,问有多少种字符串$b$满足长度与$a$相同且每一位$b[i] = a[i] OR a[i-1] OR a[i+1]$,结果模$10^9 + 7$.Case数$T$不大于$100$,字符串长度$L$不大于$1000$.
直接枚举每一位,统计相邻的位上有几种字符,然后乘起来就行了.复杂度$O(TL)$.
1 | //省略头文件 |
B. Robot Rock Band
给$4$个含有$N$个数的数组,和一个数$K$,从数组中各取一个数$a,b,c,d$,问有多少种情况满足$a$^$b$^$c$^$d=K$.其中$N$不大于$1000$,Case数$T$不大于$10$.
等价于找$a$^$b=c$^$d$^$k$的组数.枚举所有$a,b$的组合,扔到map里面计数.然后枚举$c,d$的组合,看有多少$c$^$d$^$k$在map里面,加一下就可以了.复杂度$O(T N^2 \log(N))$
1 | //省略头文件 |
C. Not So Random
给$6$个数$N,X,K,A,B$和$C$,表示有$N$个节点串联在一起,每个节点输入一个数$in$并且处理后输出一个数$out$.对于每个节点,有$A/100$的概率$out=in$&$K$,有$B/100$的概率$out=in$|$K$,有$C/100$的概率$out=in$^$K$.求对第一个节点输入$X$,最后一点节点输出的期望值.$N$不大于$10^5$,Case数$T$不大于$50$.
反正都是与或非$K$,每个节点输出可取的值的个数很有限,视为常数$a$,所以直接枚举每个点的输出暴力求,有点类似概率dp,只不过这里用map搞.复杂度$O(aTN\log(a))$,$a$是一个常数.
1 | //省略头文件 |
D. Sums of Sums
给一个长度为$N$的数组,枚举左端点右端点求和,得到$N*(N+1)/2$个数,将这些数排序以后得到新数组.然后有$Q$个询问,对于每个询问有$l,r$,问对新数组$[l,r]$区间和是多少.Case数$T$不大于$10$,$Q$不大于$20$,$N$不大于$200000$.
根本不会,看数据范围应该是根据什么性质去二分,只会暴力的去做small(1 ≤ N ≤ 10^3).就枚举一下原数组,$O(N^2)$的生成新数组,然后排序求前缀和.对于每个询问减一下就行了.复杂度$O(N^2 \log(N)+Q)$
1 | //省略头文件 |