考场

T1 貌似是 luogu 上原题

T2 计数,想起了这题这题,但没有 \(n^2\) 一档的分。。。准备打个表

T3 期望 DP,但暴力是 \(O(qn)\) 的,发现 \(combo\) 的形式像一次函数,应该要用 DS 维护。

7.30 开写,8.00 拍上 T1

T2 打表发现填的数是每个数最后一次出现位置的升序那就有 53pts,比较满意。然后一直在想怎么改上面那题的方程,弃的比较早

T3 一度推出的暴力 DP 的式子,写出来不对,调了调也没啥思路,只能拼部分分了。sub6 只要维护 \(p\) 的区间和就行了,sub4 应该是 DP 的弱化版,但求稳拍了一下 sub6

res

rk3 100+53+40

rk1 张泽阳 100+78+89

rk2 ycx 100+78+64

总结

想正解的时间太长,这两天都出现了会的部分分没时间写的情况。总想 A 题,但思路不够灵活,码力不够强,于是考得好不好完全取决与题适不适合我。。。其实没有必要 A 题,上次如果再拿一个 sub 也能 rk1,这次的前两名也都是靠部分分。

最近减少开写前想题的时间,但写完暴力再想也不太有用,再试试吧。

还有 DP 这个大坑。其实 DP 题做的也不少了,但还是做不出来/有想法调不出来,主要是抄题解太多了,很多东西没有自己思考,作死啊。发现每日一题咕的越来越多,题也越来越水了。。。等回去了重开一个吧,只记录紫题及以上。

另一方面,DP 弱已经成了心理上的束缚。T2 宁愿在以前题的基础上改也不愿意再想一个,T3 都写出来了也不愿意调。与其说能力不够,不如说自己已经认了,不相信自己能写出 DP,这和等死有什么区别,尽快调整心态。

Prime

线性筛出 \(\sqrt R\) 范围内质数,再埃氏筛 \([L,R]\) 中的,时间复杂度 \(O(\sqrt R+(R-L)\log\log R)\)

考场代码
const int N = 1e7+5;
int k;
LL l,r; int n,pri,p[N];
LL ans;
bool vis[N]; void sieve() {
For(i,2,n) {
if( !vis[i] ) p[++pri] = i;
for(int j = 1; j <= pri && i*p[j] <= n; ++j) {
vis[i*p[j]] = 1;
if( !(i % p[j]) ) break;
}
}
memset(vis,0,sizeof vis);
} signed main() {
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
read(l,r,k); n = min((int)sqrt(r),k);
sieve();
For(i,1,pri) for(LL j = max((LL)p[i],(l+p[i]-1)/p[i])*p[i]; j <= r; j += p[i])
vis[j-l] = 1;
for(LL i = l; i <= r; ++i) if( !vis[i-l] ) ans ^= i;
write(ans);
return iocl();
}

Sequence

考虑已经确定的数列如何 DP,设 \(f[i,j]\) 为前 \(i\) 个数以值 \(j\) 结尾的本质不同子序列,则 \(f[i,a_i]=1+\sum_{j=1}^kf[i-1,j],\forall j\neq a_i,f[i,j]=f[i-1,j]\)(将前面本质不同的子序列后加上 \(a_i\) 这个值,同时 \(a_i\) 单个值也算一个序列。答案为 \(\sum_{i=1}^kf[n,i]\)

发现将第一位滚掉后,不论 \(a_i\) 是什么,\(f[a_i]\) 的值是固定的,容易想到让 \(a_i\) 为当前 DP 值最小的值,即最后一次出现位置最靠前的值(DP 值一定不降)。那么后面 \(m\) 个元素填的顺序是固定的,每 \(k\) 个循环一次,矩阵快速幂加速递推即可。

时间复杂度 \(O(n+k^3\log m)\)

code
const int N = 1e6+5, mod = 1e9+7;
int n,k,a[N];
LL m; LL sum=1,ans,f[105];
PII lst[105]; void ckadd(LL &x,LL y) { x+=y; if(x>=mod)x-=mod; else if(x<0)x+=mod; } struct Mat {
LL a[102][102];
Mat(bool op=0) {
memset(a,0,sizeof a);
if(op) For(i,1,101) a[i][i] = 1;
}
LL* operator [] (int i) { return a[i]; }
} s,base,t;
Mat operator * (Mat x,Mat y) {
Mat res;
For(i,1,101) For(k,1,101) For(j,1,101) res[i][j] += x[i][k]*y[k][j] %mod;
For(i,1,101) For(j,1,101) res[i][j] %= mod;
return res;
}
Mat operator ^ (Mat x,LL y)
{ Mat res(1); for(;y;y>>=1,x=x*x)if(y&1)res=res*x; return res; } signed main() {
read(n,m,k);
For(i,1,n) read(a[i]), lst[a[i]].fi = i;
For(i,1,k) lst[i].se = i; sort(lst+1,lst+k+1);
For(i,1,n) {
LL tmp = f[a[i]];
f[a[i]] = sum, ckadd(sum,f[a[i]]-tmp);
}
For(i,1,k) s[1][i] = f[lst[i].se]; s[1][k+1] = 1;
For(j,2,k) base[j][j-1] = 1; For(i,1,k+1) base[i][k] = 1; base[k+1][k+1] = 1;
t = s * (base ^ m);
For(i,1,k) ans += t[1][i];
write(ans%mod);
return iocl();
}

Omeed

\(BasicScore\) 显然是 \(\sum_{i=l}^rp_i\)。考虑暴力 DP :设 \(f[i]\) 为前 \(i\) 个音符的 \(Combo\),则有 \(f[i]=p_i(f[i+1]+1)+(1-p_i)t\times f[i-1]\),这部分的答案为 \(B\sum_{i=l+1}^rp_i(f[i-1]+1)\)。(因为只有当前这位 \(s_i=1\) 时 \(Combo\) 才有贡献,因此不能直接用 \(p_if[i]\) 算)

推推式子发现这是个一次函数的形式,线段树维护系数和常数即可(具体看代码)。

code
const int N = 5e5+5, mod = 998244353;
int sub,n,q;
LL tt,a,b; LL Pow(LL x,LL y=mod-2)
{ LL res=1; for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod; return res; }
LL frac(LL x,LL y) { return x * Pow(y) %mod; } #define ls (u<<1)
#define rs (u<<1|1)
#define mid ((l+r)>>1)
#define lson ls,l,mid
#define rson rs,mid+1,r
#define up(u) (t[u]=t[ls]+t[rs])
struct Node {
LL k,b,sumk,sumb,sump;
// f[r]=kf[l-1]+b 这个区间的答案(f之和)为sumkf[l-1]+sumb p的区间和sump
void init(LL x) { k = (x+tt-tt*x%mod+mod)%mod, b = sumk = sumb = sump = x; }
} t[N*4];
Node operator + (Node x,Node y) {
return Node{ x.k*y.k%mod, (y.k*x.b+y.b)%mod,
(x.sumk+x.k*y.sumk)%mod, (x.sumb+y.sumk*x.b+y.sumb)%mod,
(x.sump+y.sump)%mod };
}
void build(int u=1,int l=1,int r=n) {
if( l == r ) {
LL x,y; read(x,y);
return t[u].init(frac(x,y));
}
build(lson), build(rson);
up(u);
}
void modify(int p,LL x,int u=1,int l=1,int r=n) {
if( l == r ) return t[u].init(x);
if( p <= mid ) modify(p,x,lson);
else modify(p,x,rson);
up(u);
}
Node query(int ql,int qr,int u=1,int l=1,int r=n) {
if( ql <= l && r <= qr ) return t[u];
if( qr <= mid ) return query(ql,qr,lson);
if( mid < ql ) return query(ql,qr,rson);
return query(ql,qr,lson) + query(ql,qr,rson);
}
#undef ls
#undef rs
#undef mid
#undef lson
#undef rson
#undef up signed main() {
read(sub,n,q,a,b); tt = frac(a,b); read(a,b);
build();
while( q-- ) {
int op; read(op);
if( !op ) {
int u; LL x,y; read(u,x,y);
modify(u,frac(x,y));
} else {
int l,r; read(l,r);
Node ans = query(l,r);
write((a*ans.sump + b*ans.sumb) %mod);
}
}
return iocl();
}

20210824 Prime,Sequence,Omeed的更多相关文章

  1. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  2. poj2478 Farey Sequence (欧拉函数)

    Farey Sequence 题意:给定一个数n,求在[1,n]这个范围内两两互质的数的个数.(转化为给定一个数n,比n小且与n互质的数的个数) 知识点: 欧拉函数: 普通求法: int Euler( ...

  3. POJ 2739 Sum of Consecutive Prime Numbers(尺取法)

    题目链接: 传送门 Sum of Consecutive Prime Numbers Time Limit: 1000MS     Memory Limit: 65536K Description S ...

  4. POJ 1365 Prime Land(数论)

    题目链接: 传送门 Prime Land Time Limit: 1000MS     Memory Limit: 10000K Description Everybody in the Prime ...

  5. ACM:POJ 2739 Sum of Consecutive Prime Numbers-素数打表-尺取法

    POJ 2739 Sum of Consecutive Prime Numbers Time Limit:1000MS     Memory Limit:65536KB     64bit IO Fo ...

  6. Prime Query (ZOJ 3911 线段树)

    Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a sequen ...

  7. ZOJ 3911 Prime Query ZOJ Monthly, October 2015 - I

    Prime Query Time Limit: 1 Second      Memory Limit: 196608 KB You are given a simple task. Given a s ...

  8. HDU 4390 Number Sequence 容斥原理

    Number Sequence Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  9. HDU 1016 Prime Ring Problem

    在刚刚写完代码的时候才发现我以前交过这道题,可是没有过. 后来因为不理解代码,于是也就不了了之了. 可说呢,那时的我哪知道什么DFS深搜的东西啊,而且对递归的理解也很肤浅. 这道题应该算HDU 261 ...

随机推荐

  1. noip模拟测试22

    考试总结:这次考试题,有好多部分分,导致了我在考试过程中一心想拿到这些部分分,对于正解没有留出时间进行思考,这是一个教训,在以后的考试中我一定要留出足够的思考时间,不要被部分分限制.还有,我的部分分也 ...

  2. js--class类、super和estends关键词的学习笔记

    前言 JavaScript 语言在ES6中引入了 class 这一个关键字,在学习面试的中,经常会遇到面试官问到谈一下你对 ES6 中class的认识,同时我们的代码中如何去使用这个关键字,使用这个关 ...

  3. BUUCTF-[HCTF 2018]admin(Unicode欺骗&伪造session)

    目录 方法一:Unicode欺骗 方法二:伪造session 参考文章 记一道flask下session伪造的题. 方法一:Unicode欺骗 拿到题目f12提示you are not admin,显 ...

  4. "百度杯"CTF比赛 十月场——EXEC

    "百度杯"CTF比赛 十月场--EXEC 进入网站页面 查看源码 发现了vim,可能是vim泄露,于是在url地址输入了http://21b854b211034489a4ee1cb ...

  5. SpringMVC学习04(数据处理及跳转)

    4.数据处理及跳转 4.1结果跳转方式 4.1.1 ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前缀} ...

  6. Linux中的DNS主从解析

    目录 一.主服务器配置(紧接着正反解析实验) 1.1.修改区域配置文件 二.从服务器配置(启动另一台虚拟机) 2.1.安装服务 2.2.修改主配置文件 2.3.修改区域配置文件 2.4.修改dns服务 ...

  7. Java基础技术-Java其他主题【面试】

    Java基础技术-Java其他主题[面试] Java基础技术IO与队列 Java BIO.NIO.AIO Java 中 BIO.NIO.AIO 的区别是什么? 含义不同: BIO(Blocking I ...

  8. 漏洞复现|Dubbo反序列化漏洞CVE-2019-17564

    01漏洞描述 - Apache Dubbo支持多种协议,官方推荐使用Dubbo协议.Apache Dubbo HTTP协议中的一个反序列化漏洞(CVE-2019-17564),该漏洞的主要原因在于当A ...

  9. Echarts 展示两条动态数据曲线

    利用Echarts 展示两条动态数据曲线,每1秒刷新一下数据,在echart官网例子基础上修改,修改了仿真数据的生成方式.生成数量,曲线数量,最总效果图如下: 详细代码如下: 遇到的主要问题点, 1, ...

  10. SSRF详解

    上一篇说了XSS的防御与绕过的思路,这次来谈一下SSRF的防御,绕过,利用及危害 0x01 前置知识梳理 前置知识涉及理解此漏洞的方方面面,所以这部分要说的内容比较多 SSRF(Server-Side ...