CSP-S 模拟46

已经一个月多没写博客了,昨天考试考炸了,改完T1、T2, T3看不懂题解就这样

我的成绩

倒数第一

T1  Set

前缀和水题(我还是太菜了),

N个数前缀和有N个,在模N意义下,只可能是0,1,2,… N-1,共N种情况,当前缀和为0时,显然是1~i,

那么除去为0的情况,N个前缀和里必有两个前缀和相等,那么这一段区间和是N的倍数,输出即可

 

T2 Read

完全没想到可以这么做,推了半天柿子,蛮有信心的开打,结果最基本的统计不会(我就是菜鸡,我SB)

不过还是想说一下我都在忙啥(可能以后会用的着)

可以不看——————————————————————————————————

S=(1<<k)-1,形如11111111的二进制数,

&S即为% (1<<k)

A[n]=(A[n-1]*y+z)%mod

打表得递推式推着推着会出现连续的相等的数,即这各值以后都不会变了

开始推~ A[n]=((((A[1]*y+z)*y+z)*y+z)……

$ A[n]=A[1]*y^{n-1}+z*(y^{n-2}+y^{n-3}+……+y+1) $

不变的条件是A[n]==A[n+1]

$ A[n+1]-A[n]=(A[1]*y^{n}-A[1]*y^{n-1})+z*y^{n-1} =0$

由 A[1]=x 得

(x*y-x+z)*y^{n-1}%mod==0

可求出连续相等的数的第一个位置n,貌似用BSGS求,不太会(好吧,我忘了)

不过这个东西好像没啥用~

———————————————————————————————————————

正解求出数量最多的种类,在扫一遍求出该种类的个数,没了,大概就是一个简单的统计,我TM的整那么复杂还Wa0

 

T3 Race(好题

对于排名为X的人会获得X^2 的积分,而他前面会有X个人,非常神奇的转换一下,这就是从比他靠前的人每选两个人加个1,

把每个数从二进制高位到低位存到trie树中,

对于一个数a[]找到与他前几个高位一样,而第i位不同的数的个数num,

对于这些数只要天数的第i位与a[]的第i位相同,那么异或完之后这些数都大于a[],那么两两组合贡献为num*num,再乘上天数 2^(m-1) (第i位与a[]相同,所以是2^(m-1))

那么还有其他的第j位不同的数的个数num2,它们和第i位不同的数同时大于a[]的天数是 2^(m-2) ,贡献$ 2^num*num_2*2^{m-2} $

统计每一个数的积分和,异或一下

 

posted @ 2019-09-19 11:53  Lockey_T  阅读(191)  评论(0编辑  收藏  举报