[考试反思]0207省选模拟20:风波

估分10+20+20=50。T1没炸T2炸了。总体来说炸得不算厉害。

开考的第一个小时一直在争论T1到底是不是原题。

管它是不是我按照原题的方法打呗(其实不太一样,更简单了但是数据范围加大时限减小)

一个LCT调了好久。。。至少最后还是调出来了,难得。。。(第一次在考场上调出LCT。。。虽说原来考场上也没写过)

T2特别简单但是看错题导致想到正解又放弃了而且写了错误题意下的暴力光荣爆零(样例就是个x啊)

T3的话是个单变量的题,惯性打表找规律,没有发现什么,但是根据函数增长速度隐约觉得答案是个低次多项式。

想代值求解来着但是觉得不靠谱,于是又错失了AC。。。(然而幸亏没A。。。这题正解太神奇了虽说就算看了正解也就是暴解的多项式。。)

然而今天改题效率奇高,中午就写完了简单的T2。(然而一个愚蠢的细节又调了半天)

然后下午又砸了两三个小时在昨天T2上终于是A了,一共用了差不多十个小时的题。。。那题解我得好好弄一弄了。。。

在skyh的讲解下弄明白了昨天T3,一个多小时也就写完了。就总算是把昨天的锅修了。

然后看了题解知道今天T3考场上的思路可行,随便写一写就A了。

然而T3题解的具体列式过程还有待仔细研究一下,但因为想到了昨天咕掉的反思于是今天优先来写反思了。(现在是18:43)

不出意外的话今晚把T3题解做法弄明白之后就去把根号数据结构的视频课收个尾差不多今天也就结束了。

昨天欠的状态差不多今天也就都补回来了啊。挺好的一天。

T1:Ring

大意:无向图,求第[l,r]条边是否组成环。$n,m,q \le 300000$

原题《GERALD07加强版》。稍加改动。

因为这题没有强制在线,所以这次写的比上次简单的多了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define S 666666
 4 #define lc c[0][p]
 5 #define rc c[1][p]
 6 int c[2][S],f[S],q[S],lz[S],n,m,Q,lst[S],a[S],b[S],tf[S],mn[S],w[S];
 7 bool nr(int p){return c[0][f[p]]==p||c[1][f[p]]==p;}
 8 void rev(int p){swap(lc,rc);lz[p]^=1;}
 9 void down(int p){if(lz[p])lz[p]=0,rev(lc),rev(rc);}
10 void up(int p){mn[p]=min(p,min(mn[lc],mn[rc]));}
11 void spin(int p){
12     int F=f[p],G=f[F],D=c[1][F]==p,B=c[!D][p];
13     if(nr(F))c[c[1][G]==F][G]=p; c[!D][p]=F; c[D][F]=B;
14     if(B)f[B]=F; f[F]=p; f[p]=G; up(p); up(F);
15 }
16 void splay(int p){
17     int F,r=p,top;q[top=1]=p;
18     while(nr(r))q[++top]=r=f[r]; while(top)down(q[top--]);
19     while(F=f[p],nr(p))spin(p);up(p);
20 }
21 void access(int p){int r=p;for(int y=0;p;p=f[y=p])splay(p),rc=y,up(p);splay(r);}
22 void make(int p){access(p);rev(p);}
23 void link(int a,int b){make(a);f[a]=b;}
24 void split(int a,int b){make(a);access(b);}
25 void cut(int a,int b){split(a,b);f[a]=c[0][b]=0;up(b);}
26 int find(int p){return tf[p]^p?tf[p]=find(tf[p]):p;}
27 void build(int p,int cl,int cr){
28     if(cl==cr){w[p]=lst[cl];return;}
29     build(p<<1,cl,cl+cr>>1);build(p<<1|1,(cl+cr>>1)+1,cr);w[p]=max(w[p<<1],w[p<<1|1]);
30 }
31 int ask(int l,int r,int p,int cl,int cr){
32     if(l<=cl&&cr<=r)return w[p];
33     return max(l<=cl+cr>>1?ask(l,r,p<<1,cl,cl+cr>>1):0,r>cl+cr>>1?ask(l,r,p<<1|1,(cl+cr>>1)+1,cr):0);
34 }
35 int main(){//freopen("1.in","r",stdin);
36     scanf("%d%d%d",&n,&m,&Q);mn[0]=f[0]=n+m+1;
37     for(int i=1;i<=n;++i)tf[i]=i;
38     for(int i=1;i<=m;++i){
39         scanf("%d%d",&a[i],&b[i]);
40         if(find(a[i])==find(b[i])){
41             split(a[i]+m,b[i]+m);lst[i]=mn[b[i]+m];
42             cut(lst[i],a[lst[i]]+m);cut(lst[i],b[lst[i]]+m);
43         }else tf[tf[a[i]]]=tf[b[i]];
44         link(i,a[i]+m);link(i,b[i]+m);
45     }build(1,1,m);
46     for(int i=1,l,r;i<=Q;++i)scanf("%d%d",&l,&r),puts(ask(l,r,1,1,m)>=l?">_<":"QAQ");
47 }

T2:Exchange

大意:维护序列支持区间加,区间交换,区间求和。区间交换的形式为$[l\times 2^c,(l+1)\times 2^c),[r \times 2^c,(r+1)\times 2^c)$。强制在线。$n\le 10^8,m\le 10^5$

考场上看区间交换形式时没有看到$l,r$也乘了$2^c$。然后就变得非常恶心。

看到之后就是很明显的$zkw$线段树的变版。利用了区间长度与区间左端点都是2的整次幂的倍数的性质。

类似$FFT$预处理的形式,如果n长度不是2的整次幂,就把它扩展到2的整次幂。

然后就是一个非常裸的动态开点线段树了。区间交换直接取值$swap$节点即可。

代码也极端好写。

同时也$get$到了一个新坑点。。。不强制在线时有时候$lastans \times =0$是有锅的。例如这题就算$lastans=0$你也会多取模一次。。。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define S 30000000
 4 #define md (cl+cr>>1)
 5 int rt,n,m,o,lc[S],pc,rc[S],lz[S],N;long long ans,w[S];
 6 void down(int p,int cl,int cr){
 7     if(!lc[p])lc[p]=++pc;if(!rc[p])rc[p]=++pc;
 8     lz[lc[p]]+=lz[p];lz[rc[p]]+=lz[p];
 9     w[lc[p]]+=(md-cl+1ll)*lz[p];w[rc[p]]+=(cr-md+0ll)*lz[p];lz[p]=0;
10 }
11 void add(int l,int r,int v,int&p=rt,int cl=0,int cr=N){
12     if(!p)p=++pc;
13     if(l<=cl&&cr<=r){lz[p]+=v;w[p]+=v*(cr-cl+1ll);return;}
14     if(lz[p])down(p,cl,cr);
15     if(l<=md)add(l,r,v,lc[p],cl,md); if(r>md)add(l,r,v,rc[p],md+1,cr); w[p]=w[lc[p]]+w[rc[p]];
16 }
17 long long ask(int l,int r,int&p=rt,int cl=0,int cr=N){
18     if(!p)p=++pc;
19     if(l<=cl&&cr<=r)return w[p];
20     if(lz[p])down(p,cl,cr);
21     return (l<=md?ask(l,r,lc[p],cl,md):0)+(r>md?ask(l,r,rc[p],md+1,cr):0);
22 }
23 int&find(int l,int r,int&p=rt,int cl=0,int cr=N){
24     if(!p)p=++pc;
25     if(l==cl&&cr==r-1)return p;
26     if(lz[p])down(p,cl,cr);
27     int&x=l<=md?find(l,r,lc[p],cl,md):find(l,r,rc[p],md+1,cr);w[p]=w[lc[p]]+w[rc[p]];
28     return x;
29 }
30 int main(){
31     cin>>n>>m>>o;N=(1<<27)-1;
32     for(int i=1,k,l,r,d;i<=m;++i){
33         scanf("%d%d%d",&k,&l,&r);if(o)l=(l+ans)%(n+1),r=(r+ans)%(n+1);
34         if(k==3)printf("%lld\n",ans=ask(l,r));
35         else if(k==1)scanf("%d",&d),d=o?(d+ans)%(n+1):d,add(l,r,d);
36         else scanf("%d",&d),d=o?(d+ans)%(n+1):d,swap(find(l<<d,l+1<<d),find(r<<d,r+1<<d)),find(l<<d,l+1<<d),find(r<<d,r+1<<d);
37     }
38 }

T3:Match

大意:$[1,2n]$内所有数两两配对,求每对匹配的差的绝对值的方差的期望。$n \le 10^8$

根据数据范围猜测,这题有低于线性的式子。猜测它的次数不高。

答案是分数,小点找规律发现分母都是$n$

小点搜索打表+高斯消元。得到答案式$ans=\frac{10n^2-13n^1-1n^0-86n^{-1}}{45}$

具体含义见题解。还在啃。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long n,a[7][7];
 4 #define mod 1000000007
 5 int qp(int b,int t,int a=1){for(;t;t>>=1,b=1ll*b*b%mod)if(t&1)a=1ll*a*b%mod;return a;}
 6 void Gauss(){
 7     for(int i=1;i<=5;++i){
 8         int iv=qp(a[i][i],mod-2);for(int j=i;j<=6;++j)a[i][j]=a[i][j]*1ll*iv%mod;
 9         for(int j=1;j<=5;++j)if(i!=j)for(int k=6;k>=i;--k)a[j][k]=(a[j][k]-1ll*a[j][i]*a[i][k]%mod+mod)%mod;
10     }
11 }
12 int main(){
13     a[1][6]=0,a[2][6]=333333336,a[3][6]=207407410,a[4][6]=800000008,a[5][6]=746666676;
14     for(int i=1;i<=5;++i)a[i][1]=i*i*i,a[i][2]=i*i,a[i][3]=i,a[i][4]=1,a[i][5]=qp(i,mod-2);
15     Gauss();
16     cin>>n;cout<<(a[1][6]*n%mod*n%mod*n+a[2][6]*n%mod*n%mod+a[3][6]*n+a[4][6]+a[5][6]*qp(n,mod-2))%mod<<endl;
17 }

高斯消元求解,数据来源是20分暴力(最初猜测最高次数为3然而其系数为0)

1 #include<cstdio>
2 #define mod 1000000007
3 int qp(int b,int t,int a=1){for(;t;t>>=1,b=1ll*b*b%mod)if(t&1)a=1ll*a*b%mod;return a;}
4 main(){int n;scanf("%d",&n);printf("%lld",(222222224ll*n%mod*n%mod+311111113ll*n+177777779+288888891ll*qp(n,mod-2))%mod);}

上面那代码得到的式子

原文地址:https://www.cnblogs.com/hzoi-DeepinC/p/12274140.html

时间: 2024-10-03 15:48:21

[考试反思]0207省选模拟20:风波的相关文章

[考试反思]0113省选模拟6:过载

真累啊...离上次放假也挺久,离下次放假也挺久,离上次放出去玩也挺久,离下次放出去玩还不知道有多久... 好累啊...大脑基本成天在挂机了.什么也不想干了... 持续状态不佳.但是今天运气好,所以考试排名看起来还可以. T1没认真读题也没看数据范围,以为是送分题,17分钟写完交了...然后我就把分送出去了 像个弱智一样...但是现在的精神状态的确不太能支持好好做题 幸亏T2是个比较简单的SAM+dp,思维量不大,脑子宕机的时候也能写一写. (归功于当时给大家讲课时稍微有一点理解,要是其它的板子我

[考试反思]0114省选模拟7:迷离

这次考得相对不错,但是没什么水准. 只不过记得T1这道原题而已.虽说我忘了怎么做,而且数据范围不一样...差不多是从头想的. 但是并没有AC,像个弱智一样,有两个细节写的完全不对还有80分运气也是真好. 其实挂了不止两个细节...以为是原题于是上来就写20分钟写完,然后过一会出一个锅... 然后看T2,感觉$O(nk^2)$也许差不多?常数很大...但也不会别的.挺好想但是不是很好写. 于是乎强烈谴责cbx没素质暴力水题考后还不改正解的无脸行径 于是就开始写,写了一个半小时. 看T3,绝对大神题

[考试反思]0117省选模拟10:争夺

T3出了一点锅,于是按IOI赛制打的. 可能也是这辈子唯一一次好好打的IOI赛制了. 提答,又沉里面了,进去就出不来.莫名的虚荣让我根本没有回头看传统题. 于是的确在T3的80%时间里一直单题rk1,然而其实很慌,剩下两道题又怎样? 运气好,T1特别水,T2数据水,T3用奇技淫巧多拿7分于是并列rk1了. 数组没清空丢了1分... 状态差的不行,一下午一道题都没改出来...咕到第二天也没改出来 于是在第二天考试的时候写完三个暴力之后终于把T2A了... 然后第二天考试就炸了,没什么好说的 T1:

[考试反思]0130省选模拟13:悔恨

0+30+20=50.rk8 关键在于: T1写错个变量名挂了100分 kxkxkxkx(激动的语无伦次) 考试过程?上来看T1,一个比较裸的基环树dp,断开环上一条边之后大概就是一个稍加改动的最大独立集. 思路不难想,细节倒是有一点,考场上调啊调啊过了样例又手模了各种数据都过了两个半小时之后很开心就扔了. 然后看T2/3啥都不会,写了俩随机化就走了. 然而T3随机化+贪心是可以AC的.正确性不知道...没写... 最后还有5分钟回T1,突然发现T1可以不是基环树而是基环树森林??? 啊修锅修锅

[考试反思]0220省选模拟27:怪异

怪异的一场考试.考的有点懵 $T1$正解是模拟,人人都能切,然而也没有多少人敢笃定这就是正解吧,常数和精度上下卡着,看运气的题了. $T2$想到了第二档分其实离正解就不远了但是时间不够没往下想.回$T1$卡常去了. $T3$不给状压分,于是猜到一条结论之后并不敢往下想... 然而最后$T1$也没有卡过,考后也在这破玩意上浪费了不少时间... 而且$T3$数据特别谁水暴力可以过,然而因为我不会决策点单调,所以学了学知识点,并没有用暴力水过... T1:飞行棋 大意:长度为$n$的序列,$m$人.每

[考试反思]0410省选模拟67:迷惑

现在想想,先做$T3$真乃人间迷惑行为. 部分分不多的一场考试,$T1$部分分最多结果没花时间光荣爆零,结果正解真的就是一个暴力+大力分类讨论 $T2$也比较可想,然而看着$75pts$的子任务心中有几分慌张,苟了个暴力跑路了. 结果一个弱智$T3$的$10pts$部分分$O(n^8)$暴写了$2.8k$.从这代码长度看是不是$10pts$您施舍的有点少啊. 其余部分分一点用没有,不知道咋想的. T1:链 大意:维护操作:加边,询问有几个点满足:删掉之后图中剩下的都是若干链.$n,m \le 2

[考试反思]1219省选模拟3: 释怀

有些东西渐渐就远去了...不必挂念. 只有时间才拥有如此力量.我们能做的,唯有释怀. 这次的题格外顺手,大概是我的强项了. 但是考得还是不够好吧...感觉可以更高的 今天迎来了学了OI一年多比较重要的一个成就:(虽说是在考后) AC1000道题!还是挺不容易的. 第1000道题是今天的T3.大部分是自己思考的,题也不是很简单,挺好的. 挺过了联赛,现在想要等到下一次整百,可能就要到3月份了. 我还能在OI多久呢? 回到这场考试. T1的数据范围只有10000,让我想起了ALO那道题50000数据

[考试反思]0110省选模拟5:信仰

又倒一啦 10分真是个熟悉的成绩(虽然没有爆零熟悉) 状态一直低迷,没什么好说的 答题策略的话...就那样吧 一眼看出T1是结论题,没有部分分,不好写. 但T2是伯努利数的差不多是模板题了,于是就奔着它去了. 没有注意$0^0=1$.过不去样例最后交的暴力 没有抽时间认真打T3的暴力,因为至多30分. 因为现在30分和0分对我来说是一样的.我是要靠着省选翻盘,拿大众分的话肯定还是退役,求个稳,4个月白学. 现在的答题策略的确不能像联赛时一样了.现在求稳是赢不了了,在稳住200和争取230里我可能

[考试反思]0122省选模拟12:延迟

博客咕过了一年我也就忘了我考试状态了2333. T1是弱智题但是没想...写个暴力跑路了(时间不够,主要投在T2/3上了) 然而其实想到了一个乱搞,觉得能得分的概率不大,结果数据奇水完全不对的玩意还有20分,然而我并没有写... 然而T2写的是正解,虽说没有其他人的状压优秀,T了一个细节WA了一个拿了80分,凑合吧. 然后T3时间不多的时候写的,拿个暴力,想到了正解大概怎么写但是没有写,太恶心. 考后改题写了写,一下午就过去了...一晚上也就过去了...弄得跟我颓废了半天一样... 然而是真xx