csp-c模拟测试「set·read·」

set

题解

只要求一组特解

像入阵曲一样就好了(入阵曲真是好题啊$!$)

$(sum[r]-sum[l])\%n==0$

拆成$sum[r]\%n==sum[l]\%n$桶里存$sum[l]\%n$每次找$sum[r]$桶里有没有对应的#sum[l]#

存$tong[0]=1$,别的先查后存

证明

证明一下正确性

$0$自己合法$(sum[r]\%n)==0$不需要找对应

其他都要找一个来匹配

假设我们有$n+1$个$sum'$值,(这里假设$sum[0]$也要找一个匹配)

$\%n$意义下$sum$范围取遍$[0,n-1]$

$n+1$个$sum$,$n$种取值一定有一种合法

故得证

read

题解

要求$max(cnt[k])-$$\sum \limits_{i=1}^{N \&i!=maxid} cnt[i]$ $ -1$

然后式子稍微一化$maxcnt*2-n-1$求$maxcnt$

然而$n$实在是太巨了$50000000$,出题人卡空间$16MB$$1000ms$怎么办

主要解决空间问题

事实上我们设$id$和$cnt$,$cnt==0$时$id设为now$$cnt=1$

$id==now$ $cnt++$

$id!=now$ $cnt--$

最后$id$就是$max$,

posted @ 2019-09-19 10:20  znsbc  阅读(195)  评论(0编辑  收藏  举报