期望得分:55+24+53

实际得分:0+0+3

乐死

累加变量清零了吗?

打出更高的部分分暴力删了吗?

样例解释换行你看见了吗?

T1 Prime

打出55分做法没删原来的暴力,结果就轻松挂55分

考场上想到根号的预处理,但是并未想到如何进行映射

正解是先预处理$[1,\sqrt R]$中的类素数,然后标记他们在$[L,R]$间的倍数

剩下的就是答案

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

T2 Sequence

神仙的矩阵快速幂。

考虑设$dp_x$为子序列最后一个数是$x$的方案数,我们先$O(n)$预处理出前面$n$个的

$dp$值,将其按照先后出现的顺序升序排列构造出$k*1$的一个矩阵

考虑之后如何高效转移,发现向量矩阵里面的值转移时值大的会覆盖小的,那么方便转移应该将转移矩阵赋值为

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

这样可以满足方程式$dp_x=(\sum_{i=1}^{k}dp_i)+1$

复杂度$O(n+k^3logm)$应该懂我在表达什么(

T3 Omeed

可以转化$base=\sum p_i*A,comb=\sum p_i*(f_{i-1}+1)$ 其中$f_i$表示$comb_i$的期望

可以递推来求:$f_i=(f_{i-1}+1)*p_i+f_{i-1}*(1-p_i)$

线段树上分别维护关于$comb$的求解系数,单个$comb$的求解系数,比较麻烦

需要保证区间合并的时候,他的答案应该能用之前$f_{L-1}$配合$k,b$表示出

这一步需要稍微转化一波柿子

然而正常人敲出正解后应该只有$89$分,剩下的就要耐心的卡常

 1 #include<bits/stdc++.h>
2 #define lid (id<<1)
3 #define rid (id<<1|1)
4 #define mod 998244353
5 using namespace std;
6 namespace AE86{
7 inline int read(){
8 int 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();}return x*f;
11 }inline void write(long long x,char opt='\n'){
12 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
13 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
14 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
15 }using namespace AE86;
16 const int NN=5e5+5;
17 int n,q,ta,tb,A,B,t,p[NN],p1[NN],p2[NN];
18 struct SNOW{int sum,k,b,ans,xi;};
19 inline int qmo(int a){int ans=1,c=mod,b=mod-2; a%=c;while(b){if(b&1) ans=1ll*ans*a%c;b>>=1;a=1ll*a*a%c;}return ans;}
20
21 namespace SNOWtree{
22 int ll[NN<<2],rr[NN<<2];
23 int k[NN<<2],b[NN<<2],xi[NN<<2];
24 int sk[NN<<2],sb[NN<<2];
25 int sum[NN<<2],ans[NN<<2];
26 inline void pushup(int id){
27 if(ll[id]==rr[id]) return;
28 sum[id]=(sum[lid]+sum[rid])%mod;
29 xi[id]=(1ll*xi[lid]+1ll*xi[rid]*k[lid]%mod)%mod;
30 k[id]=1ll*k[lid]*k[rid]%mod;
31 b[id]=(1ll*b[lid]*k[rid]%mod+1ll*b[rid])%mod;
32 ans[id]=(1ll*b[lid]*xi[rid]%mod+ans[rid]+ans[lid])%mod;
33 }
34 inline void build(int id,int l,int r){
35 ll[id]=l; rr[id]=r;
36 if(l==r){
37 sum[id]=p[l]%mod;
38 k[id]=(p[l]+t-1ll*p[l]*t%mod+mod)%mod;
39 b[id]=p[l]; ans[id]=xi[id]=p[l];
40 return;
41 }int mid=l+r>>1;
42 build(lid,l,mid); build(rid,mid+1,r);
43 pushup(id);
44 }
45 inline void update(int id,int pos){
46 if(ll[id]==rr[id]){
47 int val=p[ll[id]];
48 sum[id]=val%mod;
49 k[id]=(val+t-1ll*val*t%mod+mod)%mod;
50 b[id]=val; ans[id]=xi[id]=val;
51 return;
52 }int mid=ll[id]+rr[id]>>1;
53 if(pos<=mid) update(lid,pos);
54 else update(rid,pos);
55 pushup(id);
56 }
57 inline SNOW found(int id,int l,int r){
58 if(l<=ll[id]&&rr[id]<=r)return(SNOW){sum[id],k[id],b[id],ans[id],xi[id]};
59 int mid=ll[id]+rr[id]>>1;SNOW tmp1={0,0,0,0,0},tmp2={0,0,0,0,0};
60 if(l<=mid) tmp1=found(lid,l,r);
61 if(r>mid) tmp2=found(rid,l,r);
62 return (SNOW){
63 (1ll*tmp1.sum+tmp2.sum)%mod,
64 (1ll*tmp1.k*tmp2.k)%mod,
65 (1ll*tmp1.b*tmp2.k%mod+tmp2.b)%mod,
66 (1ll*tmp1.ans+tmp2.ans+1ll*tmp1.b*tmp2.xi%mod)%mod,
67 (1ll*tmp1.xi+1ll*tmp2.xi*tmp1.k%mod)%mod
68 };
69 }
70 }using namespace SNOWtree;
71
72 namespace WSN{
73 inline short main(){
74 read(); n=read();q=read(); if(!q) return 0;
75 ta=read();tb=read(); A=read()%mod;B=read()%mod;
76 t=1ll*ta*qmo(tb)%mod;
77 for(int i=1,p1,p2;i<=n;i++)
78 p1=read(),p2=read(),p[i]=1ll*p1*qmo(p2)%mod;
79 build(1,1,n);
80 while(q--){
81 int opt=read();
82 if(opt==0){
83 int x=read(),wa=read(),wb=read();
84 int w=1ll*wa*qmo(wb)%mod; p[x]=w;
85 update(1,x);
86 }
87 if(opt==1){
88 int l=read(),r=read();
89 SNOW tmp=found(1,l,r);
90 write((1ll*A*tmp.sum%mod+1ll*B*tmp.ans%mod)%mod);
91 }
92 }
93 return 0;
94 }
95 }
96 signed main(){return WSN::main();}

最新文章

  1. Daily Scrum Meeting ——FourthDay(Beta)12.12
  2. elasticsearch-PHP第一天
  3. Emmet (Zen Coding) 官方文档中HTML语法的总结
  4. Java RMI 远程方法调用
  5. 超级好用的国际汇兑平台--Transferwise
  6. MYSQL正式环境主从复制(不锁表,不停服务)
  7. ZooKeeper原理及配置
  8. 《JS权威指南学习总结--8.5 作为命名空间的函数》
  9. jquery和javascript的区别(常用方法比较)
  10. mysql基础练习题
  11. UNIX网络编程——客户/服务器程序设计示范(七)
  12. Step by Step Recipe for Securing Kafka with Kerberos
  13. hdu5705
  14. 求最近点对算法分析 closest pair algorithm
  15. 使用hexo在GitHub上无法上传博客
  16. 1、vue 笔记之 组件
  17. Vuex的学习笔记一
  18. Azure SQL Database (26) 使用Query Store对Azure SQL Database监控
  19. stm32中assert_param的用法说明
  20. 【进阶修炼】&mdash;&mdash;改善C#程序质量(4)

热门文章

  1. GIT:创建、查看分支命令(git branch -vv)
  2. python库--pymysql
  3. 3.15学习总结(Python爬取网站数据并存入数据库)
  4. Linux没有/var/log/messages日志文件
  5. Spring框架(第一天)
  6. 【PHP数据结构】图的遍历:深度优先与广度优先
  7. 在PHP中使用SPL库中的对象方法进行XML与数组的转换
  8. CSS linear-gradient() 函数
  9. TP5指定讲师页面文章上下篇
  10. 【TP3.2.3】根据字段统计条数