csp-s模拟83

T1:
  考虑全部的异或和为sum,若小Q选择边的异或和为q,那么小T的分数就是sum^q
  发现当sum!=0时小Q只需要选择1条边即可获胜,sum==0时平手
 
T2:
  考虑枚举分界点统计个数
  因为要保证不重不漏,所以对于每个子序列我们设置一个特征值
  不妨设最右侧的左括号为特征值,对于每个序列只在特征值处统计即可保证不重不漏
  设\(pre_i\)表示\([1,i]\)中'('的个数,\(suf_i\)表示\([i,n]\)中')'的个数
\(ans = \sum_{s_i='('}^n \sum_{j=0}^{pre_i-1}(^{pre_i-1}_j)(^{suf_{i+1}}_{j+1})\)
  考虑组合意义后化简得\(\sum_{s_i='('}^n (^{suf_{i+1}+pre_i-1}_{pre_i})\)
 
T3:
  神仙题
  首先想到可以设\(f_{i,j,k}\)表示从i到j走k条边的最短路长度,\(dis_{i,j}\)表示i到j的最短路长度
  那么答案就是\(min_{p=1}^n \{ f_{i,p,k} + dis_{p,j} \}\)
  但发现计算f的复杂度是\(O(n^3k)\)的(类似floyd)
  考虑分块的思想,设计\(g_{i,j,k}\)表示从i到j走100k条边的最短路长度
  于是可以处理1到100内的f,再用f处理g,复杂度降为\(O(n^3 \sqrt{k} *2)\)可以接受
  最后用f和dis处理出数组\(h_{i,j,k}\)表示i到j走至少k步的最短路长度
  最后的答案为\(g_{i,j,k/100}+h_{i,j,k \% 100}\)

posted @ 2019-11-11 14:40  G_keng  阅读(109)  评论(0编辑  收藏  举报