T1 prime


发现只需筛小于等于$mid(\sqrt r,k)$的质数,之后用这些质数筛掉区间内不合法的数即可。

$code:$

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4
5 namespace IO{
6 inline int read(){
7 int x=0,f=1; char ch=getchar();
8 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
9 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
10 return x*f;
11 }
12 inline void write(int x,char sp){
13 char ch[20]; int len=0;
14 if(x<0){ putchar('-'); x=~x+1; }
15 do{ ch[len++]=x%10+(1<<5)+(1<<4); x/=10; }while(x);
16 for(int i=len-1;~i;i--) putchar(ch[i]); putchar(sp);
17 }
18 } using namespace IO;
19
20 const int NN=1e7+5;
21 int l,r,k,cnt,ans,pri[NN],ext;
22 bool vis[NN],is[NN];
23
24 void prime(){
25 for(int i=2;i<=ext;i++){
26 if(i<=k&&!vis[i]) pri[++cnt]=i;
27 for(int j=1;j<=cnt&&i*pri[j]<=ext;j++){
28 vis[i*pri[j]]=1;
29 if(!i%pri[j]) break;
30 }
31 }
32 for(int i=1;i<=cnt;i++){
33 int j=l/pri[i];
34 if(l!=pri[i]*j) ++j;
35 for(j=max(j,2ll);j*pri[i]<=r;j++)
36 is[j*pri[i]-l]=1;
37 }
38 }
39
40 signed main(){
41 l=read(); r=read(); k=read(); ext=min((int)sqrt(r),k);
42 prime();
43 for(int i=l;i<=r;i++)
44 if(!is[i-l]) ans^=i;
45 write(ans,'\n');
46 return 0;
47 }

T1

T2 sequence


先考虑基础$DP$。

设$f_{i}$表示以$i$为结尾的不同子序列个数。那么每次转移都有$f_i=1+\sum_{j=1}^k f_j$。最终答案为$\sum_{i=1}^k f_i$。

发现转移后大小的固定的,那么为了最大化答案,每次找最小的状态转移。

然后看到$m$的范围,有发现每次$DP$存在规律,考虑矩阵优化。

可以先通过每个值最后出现的位置得到$DP$值取模前的真实大小关系,从大到小排序,构成状态矩阵。

考虑转移矩阵,每次挑最小的转移变为最大的,然后次小变为最小,以此类推。以$k=4$为例:

$\begin{Bmatrix}
f_1\\
f_2\\
f_3\\
f_4\\
1
\end{Bmatrix}\times\begin{Bmatrix}
0 &1  &0  &0  &0 \\
0 &0  &1  &0  &0 \\0  & 0 & 0 & 1 &0 \\
1 &1  &1  &1  &1 \\
0 & 0 & 0 &0  &1
\end{Bmatrix}$

$code:$

 1 #include<bits/stdc++.h>
2 #define rin register signed
3 using namespace std;
4 typedef long long LL;
5
6 namespace IO{
7 inline LL read(){
8 LL x=0,f=1; char ch=getchar();
9 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
10 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
11 return x*f;
12 }
13 inline void write(int x,char sp){
14 char ch[20]; int len=0;
15 if(x<0){ putchar('-'); x=~x+1; }
16 do{ ch[len++]=x%10+(1<<5)+(1<<4); x/=10; }while(x);
17 for(rin i=len-1;~i;i--) putchar(ch[i]); putchar(sp);
18 }
19 } using namespace IO;
20
21 const int NN=1e6+5,p=1000000007;
22 int n,k,a[NN],b[105],lst[105],g[105],cnt,sum,ans;
23 LL m;
24 bool vis[105];
25 struct node{
26 int val,lst;
27 node(){} node(int a,int b){val=a,lst=b;}
28 inline bool operator <(const node &x)const{ return lst>x.lst; }
29 };
30 priority_queue<node> q;
31
32 namespace matrix{
33 struct mat{
34 int s[105][105];
35 void clear(){ memset(s,0,sizeof(s)); }
36 void pre(){ clear(); for(rin i=1;i<=k+1;i++) s[i][i]=1; }
37 }base,f;
38 mat mul(mat x,mat y){
39 mat res; res.clear();
40 for(rin i=1;i<=k+1;i++)
41 for(rin j=1;j<=k+1;j++)
42 for(rin u=1;u<=k+1;u++)
43 (res.s[i][j]+=1ll*x.s[i][u]*y.s[u][j]%p)%=p;
44 return res;
45 }
46 void qpow(int b){
47 }
48 } using namespace matrix;
49
50 void init(){
51 int cnt=0;
52 f.s[k+1][1]=base.s[k+1][k+1]=1;
53 for(rin i=2;i<=k;i++) base.s[i-1][i]=1;
54 for(rin i=1;i<=k+1;i++) base.s[k][i]=1;
55 while(!q.empty()){ f.s[++cnt][1]=q.top().val; q.pop(); }
56 }
57
58 signed main(){
59 n=read(); m=read(); k=read();
60 for(rin i=1;i<=n;i++) a[i]=read();
61 for(rin i=1;i<=n;i++){
62 sum=(p+sum-g[a[i]])%p;
63 g[a[i]]=(g[a[i]]+sum+1)%p;
64 sum=(sum+g[a[i]])%p;
65 lst[a[i]]=i;
66 }
67 for(int i=1;i<=k;i++) q.push(node(g[i],lst[i]));
68 init();
69 while(m){
70 if(m&1) f=mul(base,f);
71 base=mul(base,base);
72 m>>=1;
73 }
74 for(rin i=1;i<=k;i++) (ans+=f.s[i][1])%=p;
75 write(ans,'\n');
76 return 0;
77 }

T2

T3 omeed


暴力$75$,正解神仙数据结构,线段树上维护基础分的和与左端点$-1$处连击分推出右端点连击分与$\sum_{i=l}^r p_i(combo_{i-1}+1)$的系数。

太神仙了不知道如何讲。丢个代码爬了

$code:$

  1 #include<bits/stdc++.h>
2 using namespace std;
3
4 namespace IO{
5 inline int read(){
6 int x=0,f=1; char ch=getchar();
7 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
8 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
9 return x*f;
10 }
11 inline void write(int x,char sp){
12 char ch[20]; int len=0;
13 if(x<0){ putchar('-'); x=~x+1; }
14 do{ ch[len++]=x%10+(1<<5)+(1<<4); x/=10; }while(x);
15 for(int i=len-1;~i;i--) putchar(ch[i]); putchar(sp);
16 }
17 } using namespace IO;
18
19 const int NN=5e5+5,mod=998244353;
20 int id,n,q,t,A,B,p[NN],combo,combos,basics,opt;
21 struct node{ int k,b,sum,ans,xi; };
22
23 inline int inv(int x){
24 int b=mod-2,res=1;
25 while(b){
26 if(b&1) res=1ll*res*x%mod;
27 x=1ll*x*x%mod;
28 b>>=1;
29 }
30 return res;
31 }
32
33 namespace segment_tree{
34 #define ld rt<<1
35 #define rd (rt<<1)|1
36 int k[NN<<2],b[NN<<2],sum[NN<<2],ans[NN<<2],xi[NN<<2],l[NN<<2],r[NN<<2];
37 inline void pushup(int rt){
38 sum[rt]=(1ll*sum[ld]+sum[rd])%mod;
39 k[rt]=1ll*k[ld]*k[rd]%mod;
40 b[rt]=(1ll*b[ld]*k[rd]%mod+b[rd])%mod;
41 xi[rt]=(1ll*xi[rd]*k[ld]%mod+xi[ld])%mod;
42 ans[rt]=(1ll*b[ld]*xi[rd]%mod+ans[ld]+ans[rd])%mod;
43 }
44 void build(int rt,int opl,int opr){
45 l[rt]=opl; r[rt]=opr;
46 if(opl==opr){
47 k[rt]=(p[opl]+t-1ll*p[opl]*t%mod+mod)%mod;
48 b[rt]=p[opl];
49 xi[rt]=ans[rt]=sum[rt]=p[opl];
50 return;
51 }
52 int mid=opl+opr>>1;
53 build(ld,opl,mid); build(rd,mid+1,opr);
54 pushup(rt);
55 }
56 void update(int rt,int pos){
57 if(l[rt]==r[rt]){
58 k[rt]=(p[pos]+t-1ll*p[pos]*t%mod+mod)%mod;
59 b[rt]=p[pos];
60 xi[rt]=ans[rt]=sum[rt]=p[pos];
61 return;
62 }
63 int mid=l[rt]+r[rt]>>1;
64 if(pos<=mid) update(ld,pos);
65 else update(rd,pos);
66 pushup(rt);
67 }
68 node query(int rt,int opl,int opr){
69 if(l[rt]>=opl&&r[rt]<=opr) return (node){k[rt],b[rt],sum[rt],ans[rt],xi[rt]};
70 int mid=l[rt]+r[rt]>>1;
71 node tmp1={0,0,0,0,0},tmp2={0,0,0,0,0},res;
72 if(opl<=mid) tmp1=query(ld,opl,opr);
73 if(opr>mid) tmp2=query(rd,opl,opr);
74 res.k=1ll*tmp1.k*tmp2.k%mod;
75 res.b=(1ll*tmp1.b*tmp2.k%mod+tmp2.b)%mod;
76 res.sum=(tmp1.sum+tmp2.sum)%mod;
77 res.ans=(1ll*tmp1.b*tmp2.xi%mod+tmp1.ans+tmp2.ans)%mod;
78 res.xi=(tmp1.xi+1ll*tmp2.xi*tmp1.k%mod)%mod;
79 return res;
80 }
81 } using namespace segment_tree;
82
83 signed main(){
84 id=read();
85 n=read(); q=read(); t=read(); t=1ll*t*inv(read())%mod; A=read()%mod; B=read()%mod;
86 for(int i=1;i<=n;i++) p[i]=read(), p[i]=1ll*p[i]*inv(read())%mod;
87 build(1,1,n);
88 while(q--){
89 opt=read();
90 if(opt==0){
91 int x=read(),w=read(); w=1ll*w*inv(read())%mod;
92 p[x]=w; update(1,x);
93 } else{
94 int ll=read(),rr=read();
95 node tmp=query(1,ll,rr);
96 write((1ll*A*tmp.sum%mod+1ll*B*tmp.ans%mod)%mod,'\n');
97 }
98 }
99 return 0;
100 }

T3

2021.8.24考试总结[NOIP47]的更多相关文章

  1. 2021.5.24考试总结 [NOIP模拟3]

    带着爆0的心态考的试,没想到整了个假rk2 (炸鱼大佬wtz忒强了OTZ T1 景区路线规划 这题对刚学完概率期望的我来说简直水爆了好吗.. 因为存在时间限制,不好跑高斯消元,就直接跑dp就完了. 令 ...

  2. 2021.04.24【NOIP提高B组】模拟 总结

    2021.04.24[NOIP提高B组]模拟 总结 T1 题意:有一圈数.两两之间有加法或乘法操作, 问你开始断掉那条边使得剩下的序列经过某种操作后的值最大 看上去是个区间 dp .然后直接断环成列, ...

  3. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  4. 梦开始的地方(Noip模拟3) 2021.5.24

    T1 景区路线规划(期望dp/记忆化搜索) 一看题目发现肯定是概率期望题,再仔细想想这三天做的题,就知道是个期望dp. 考试思路(错): 因为聪聪与可可的10分打法根深蒂固,导致在考试时想到了用深搜( ...

  5. 题解 2020.10.24 考试 T2 选数

    题目传送门 题目大意 见题面. 思路 本来以为zcx.pxj变强了,后来发现是SPJ出问题了...考试的时候感觉有点人均啊...结果自己还是只想出来一半. 我们假设 \(f(x)=(\lfloor\f ...

  6. 2021.10.18考试总结[NOIP模拟76]

    T1 洛希极限 不难发现每个点肯定是被它上一行或上一列的点转移.可以预处理出每个点上一行,上一列最远的能转移到它的点,然后单调队列优化. 预处理稍显ex.可以用并查集维护一个链表,记录当前点之后第一个 ...

  7. 2021.10.7考试总结[NOIP模拟71]

    信心赛,但炸了.T3SB错直接炸飞,T4可以硬算的组合数非要分段打表求阶乘..T2也因为一个细节浪费了大量时间.. 会做难题很好,但首先还是要先把能拿的分都拿到. T1 签到题 结论:总可以做到对每个 ...

  8. 2021.9.14考试总结[NOIP模拟53]

    T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以 ...

  9. 2021.9.13考试总结[NOIP模拟52]

    T1 路径 考虑每一位的贡献,第$i$位每$2^i$个数会变一次,那么答案为$\sum_{i=1}^{log_2n} \frac{n}{2^i}$. $code:$ 1 #include<bit ...

随机推荐

  1. Linux学习笔记--快捷键

    桌面 ALT+空格 打开窗口菜单 ALT+F1 聚焦到桌面左侧任务导航栏,可按上下键导航 ALT+F2     运行命令 ALT+F4 关闭窗口 ALT+TAB 切换程序窗口 PRINT 桌面截图 S ...

  2. React项目中应用TypeScript

    一.前言 单独的使用typescript 并不会导致学习成本很高,但是绝大部分前端开发者的项目都是依赖于框架的 例如和vue.react 这些框架结合使用的时候,会有一定的门槛 使用 TypeScri ...

  3. 驱动IO模型-select

    新人学习,欢迎指正 部分select.c代码 应用层 select(maxfd+1,&rfds,NULL,NULL,NULL); -------------------(系统调用)------ ...

  4. scrum项目冲刺_day05总结

    摘要:今日完成任务. 1.语音识别完成 2.搜索功能实现了从数据库中的查询 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成) 3.垃圾搜索 ...

  5. 基于Typora的Latex代码书写并移植到word中

    如何使用Markdown编译器 编辑Latex公式 并嵌入word内 ​ 前言:对于科研党来讲,在论文中数学公式的展示是必不可少的一环,但是如果不使用公式的格式去敲,那么公式就会过于难看,会大大降低你 ...

  6. jquery监听动态添加的input的change事件

    使用下面方法在监听普通的input的change事件正常 $('#pp').on('change', 'input.videos_poster_input', function () { consol ...

  7. english note [6.3to6.9]

    6.3 http://www.51voa.com/VOA_Special_English/pakistan-town-struggles-with-rise-in-hiv-infections-821 ...

  8. 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析OpenHarmony源码 | v13.02

    百篇博客系列篇.本篇为: v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 51.c.h .o 几点说明 kernel_liteos_a_note | 中文注解鸿蒙内核 ...

  9. 一、mybatis入门案例

    今天学习了mybatis框架,简单记录一下mybatis第一个入门案例,目标是使用Mybatis作为持久层框架,执行查询数据的SQL语句并且获取结果集 基本步骤: 物理建模 逻辑建模 引入依赖 创建持 ...

  10. 关于国密HTTPS 的那些事(一)

    关于国密HTTPS 的那些事(一) 随着<密码法>密码法的颁布与实施,国密的应用及推广终于有法可依.而对于应用国密其中的一个重要组成部分----国密HTTPS通信也应运而生.为了大家更好的 ...