• [考试反思]0926csp-s模拟测试52:审判


    也好。

    该来的迟早会来。

    反思再说吧。

    向下跳过直到另一条分界线


    %%%cbx也拿到了他的第一个AK了呢。

    我的还是遥不可及。

    我恨你,DeepinC。

    我恨透你了。
    你亲手埋葬所有希望,令我无比气愤。

    我总想打你一顿,但是这除了让他人取笑以外毫无用处。

    没有什么借口。

    本来还想用数据出锅的那90分回去,但是没有意义。

    如果这能让你有所改变的话。

    没人知道你做错了什么,至少我也不知道。

    但是这个世界不就是这个样子吗?

    只看结果,强者为王。

    你要好好思考一下教练对你说过的话:

    你真的没有那么强。

    现在你可以自觉的补一句:你弱得很呢。

    伴随着最后一场的爆炸,你总排名从第15掉到第16,从第一机房垫底到第二机房房主。

    没什么区别。

    你也不配在A层待着。

    知识不行练知识,心态不行练心态。

    不管怎么说,所有的结果都是你自己造就的,现在是由过去的你创造的,未来是由现在的你创造的。

    我也就这么一直目睹着你毁了自己。

    昨晚考得那一套题可以说是比较擅长的类型了。

    可是就算是擅长的类型,也能答成那个样子。

    那么敢问,谁还能救你呢?

    也只有你自己,也许还能挽救一下。

    直到考试结束前的最后一秒,期望得分还高达240。

    出分的时候,是真的傻眼了。

    给5分钟时间让发泄一下的决定是如此高明,虽然我并没有遵守不要喊的约定。

    T1没开int一分不剩,T2少取一次模丢60分,T3常数太大被卡成暴力掉了60分。

    T3明明想到了主席树是一个log,但是感觉二维树状数组两个log好像也能过。

    凭什么感觉?为什么不打主席树?脑子缺根筋??

    嗯。可能吧。

    但是这一切都是你自己造成的,不对吗?

    明明能做的更好,你没做到,能怨谁呢?

    也不用着急回A层了,时间还长,还不知道要考多少场才能再分一次。

    且不说进不进的去,就算进去了,你连联赛的分数都稳不住你学什么省选知识点??

    我也不相信你了。你要重新审视自己了。

    我恨你。

    我恨透你了。

    要是昨天晚上别人都能想到你这种程度,那么你就是稳稳的倒数第一了。

    但是你能随手丢掉160分,别人怎么能不超过你?

    第一机房是留给强者的。

    那里的位置是拼命争取才能得到的,并不是想要就能要的。

    我想去。

    但是你让我没去成。

    我恨你。我恨透你了。

    DeepinC,空有一腔所谓的热情是无用的。

    就算你节节课间都往机房跑,你也不一定就能进第一机房。

    你得面对你的缺点。

    你自己数数,int改long long和取模爆炸这种问题你犯了多少次。

    我想问你,你什么时候才能不再犯?

    你给不出回答吧?

    那么你就是活该了。

    时间不多了,真的。

    联赛就在眼前了。

    曾经你是瞧不起联赛的,你直接就把眼光放在省选上了。

    但是现在看来,不是很可笑吗?

    你仔细思考一下:

    如果你要靠翻盘才能进省队的话,那还不如不要学了。

    现在摆在你面前的,省一都是问题吧。。。

    我还是希望你不要辜负我的一腔热血。

    最近的状态啊。。。我感觉我也没有颓什么啊。。

    文化课文化课不行,奥赛奥赛爆炸。。。

    看起来没有丝毫前途。。。

    你不要再提曾经了,曾经的事情已经过去,也无法改变。

    你把自己从A层拽出来了,承认这个结果就好了。

    我还是想做A层的题。但现在不是任性的时候。

    或者说,你没有任性的权力。

    你一定还记得你的那篇《短期Flag》。

    你已经对不起当时的自己了。

    梦想在破灭。但是这还不是最后一个梦想。

    梦醒了的话,你就该奋力前行了。

    也许,还来得及。

    你可能没做错什么,但是你做的还不够好。

    细致一些吧,我求求你了。

    我恳求你对我的,也是你自己的梦想,作出一些施舍。

    我恨你,废物一个。

    画着父母的钱,干不出一点好事。

    连自己都对不起,就不必提是否愧对别人了。

    我不忍心再让那些对我还抱有信心的人失望了,你呢?

    你还有一些良知吧?

    你还可以做得更好吧?

    我恨透了你。但是没办法:

    我只能虔诚地希望你能争点气

    为自己谋得一条出路。。。

    为我的内心带来一些满足。。。


    T1:平均数

    处理平均数类题的通用方法:把每一项都减去平均数。

    李某东上的原题,不会。

    直接做是没法做的,很容易想到二分答案,关键就是怎么check。

    把每一项都减去mid值之后再做前缀和,统计逆序对。

    具体统计的方法,就是扔进结构体里sort,用树状数组统计下标的逆序对,答案是一样的。

    卡常且卡精度。

    要开long long。不然一分没有。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int a[100005],n,t[100005],s[100005];long long k;
     5 void add(int p,int w){for(;p<=100001;p+=p&-p)t[p]+=w;}
     6 int ask(int p,int a=0){for(;p;p-=p&-p)a+=t[p];return a;}
     7 struct ps{double w;int p;friend bool operator<(ps a,ps b){return a.w<b.w;}}p[100005];
     8 long long chk(double x){
     9     long long inver=0;double sum=0;p[0]=(ps){0,0};
    10     for(int i=1;i<=n;++i)p[i]=(ps){sum+=a[i]-x,i};
    11     sort(p,p+n+1);
    12     for(int i=n;~i;--i)inver+=ask(p[i].p+1),add(p[i].p+1,1);
    13     for(int i=0;i<=n;++i)add(i+1,-1);//printf("%lld
    ",inver);
    14     return inver;
    15 }
    16 int main(){
    17     scanf("%d%lld",&n,&k);k--;
    18     double l=1,r=0;
    19     for(int i=1;i<=n;++i)scanf("%d",&a[i]),r=max(r,a[i]*1.0);
    20     while(r-l>1e-5)if(chk((l+r)/2)>k)r=(l+r)/2;else l=(l+r)/2;
    21     printf("%.4lf
    ",l);
    22 }
    View Code

    T2:涂色游戏

    最裸的矩阵快速幂。

    这一行的填色方案只与上一行有关,所以dp。

    dp[i][j]表示在第i行填了特定j中颜色的方案数。

    考虑转移。枚举两行的颜色数再枚举交集即可。

    如果上一行有i种下一行有j种交集为k种。

    转移条件是i+j-k<=p&&i+j-k>=q。

    那么就是一个组合数学问题了。

    先在上一行的颜色里选出重复部分$C_i^k$

    再选出这一行交集以外的部分$C_{p-i}^{j-k}$

    然后的问题就是已知某k种颜色填n个位置,要求每种颜色必须出现。我是dp做的,据说可以容斥。

    然后发现每一层的转移系数都相同,那就是简单的矩阵快速幂了。

    注意取模。

     1 #include<cstdio>
     2 #define int long long
     3 #define mod 998244353
     4 int n,m,p,q,pl[101][101],C[101][101],base[101][101],ans[101],re[101][101],Ans;
     5 void mult_base(){
     6     for(int i=1;i<=p;++i)for(int j=1;j<=p;++j)for(int k=1;k<=p;++k)re[i][j]=(re[i][j]+base[i][k]*base[k][j])%mod;
     7     for(int i=1;i<=p;++i)for(int j=1;j<=p;++j)base[i][j]=re[i][j],re[i][j]=0;
     8 }
     9 void mult_ans(){
    10     for(int i=1;i<=p;++i)for(int j=1;j<=p;++j)re[0][i]=(re[0][i]+ans[j]*base[j][i])%mod;
    11     for(int i=1;i<=p;++i)ans[i]=re[0][i],re[0][i]=0;
    12 }
    13 signed main(){
    14     scanf("%lld%lld%lld%lld",&n,&m,&p,&q);m--;
    15     pl[0][0]=1;
    16     for(int i=1;i<=n;++i)for(int j=1;j<=p;++j)pl[i][j]=(pl[i-1][j-1]+pl[i-1][j])*j%mod;
    17     for(int i=0;i<=p;++i)C[i][0]=1;
    18     for(int i=1;i<=p;++i)for(int j=1;j<=i;++j)C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
    19     for(int x=1;x<=p;++x)for(int y=1;y<=p;++y)for(int c=0;c<=p;++c)if(x+y-c<=p&&x+y-c>=q)
    20         base[x][y]=(base[x][y]+C[x][c]*C[p-x][y-c]%mod*pl[n][y])%mod;
    21     for(int i=1;i<=p;++i)ans[i]=pl[n][i]*C[p][i]%mod;
    22     for(;m;m>>=1,mult_base())if(m&1)mult_ans();
    23     for(int i=1;i<=p;++i)Ans=(Ans+ans[i])%mod;
    24     printf("%lld
    ",Ans);
    25 }
    View Code

    T3:序列

    对于每一个区间询问都可以拆成两部分:l-1以内的w以上的数产生-1贡献,r以内w以上的数产生1贡献。

    然后就是可以考虑每一个位置的贡献了。是个二维偏序。

    用主席树可以做到一个log,两个log会T成暴力。

    然后修改一个位置就是删除原贡献添加新贡献。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 struct qs{int p,w,v;friend bool operator<(qs a,qs b){return a.p<b.p;}}qt[200005];
     5 int n,m,q,a[100005],cnt,rt[100005],ecnt,lc[10000005],rc[10000005],w[10000005],nw;long long lastans;
     6 void insert(int &p,int cpy,int wp,int v,int cl=1,int cr=n+2){
     7     p=++ecnt;
     8     if(cl==cr){w[p]=w[cpy]+v;return;}
     9     if(wp<=cl+cr>>1)insert(lc[p],lc[cpy],wp,v,cl,cl+cr>>1),rc[p]=rc[cpy];
    10     else insert(rc[p],rc[cpy],wp,v,(cl+cr>>1)+1,cr),lc[p]=lc[cpy];
    11     w[p]=w[lc[p]]+w[rc[p]];
    12 }
    13 int ask(int p,int pos,int cl=1,int cr=n+2){
    14     if(cr<=pos)return w[p];
    15     if(cl+cr>>1>=pos)return ask(lc[p],pos,cl,cl+cr>>1);
    16     return w[lc[p]]+ask(rc[p],pos,(cl+cr>>1)+1,cr);
    17 }
    18 int main(){
    19     scanf("%d%d%d",&n,&m,&q);
    20     for(int i=1;i<=n;++i)scanf("%d",&a[i]);
    21     for(int i=1,x,y,W;i<=m;++i)scanf("%d%d%d",&x,&y,&W),qt[++cnt]=(qs){n-x+2,W,-1},qt[++cnt]=(qs){n-y+1,W,1};
    22     sort(qt+1,qt+1+cnt);
    23     for(int i=1;i<=cnt;++i)if(qt[i].p==qt[i-1].p)insert(nw=0,rt[qt[i].p],qt[i].w,qt[i].v),rt[qt[i].p]=nw;
    24         else{for(int j=qt[i-1].p+1;j<qt[i].p;++j)rt[j]=rt[j-1];insert(rt[qt[i].p],rt[qt[i].p-1],qt[i].w,qt[i].v);}
    25     for(int j=qt[cnt].p+1;j<=n+2;++j)rt[j]=rt[j-1];
    26     for(int i=1;i<=n;++i)lastans+=ask(rt[n-i+1],a[i]);
    27     printf("%lld
    ",lastans);
    28     for(long long i=1,p,W;i<=q;++i){
    29         scanf("%lld%lld",&p,&W);
    30         p^=lastans;W^=lastans;
    31         lastans-=ask(rt[n-p+1],a[p]);lastans+=ask(rt[n-p+1],a[p]=W);
    32         printf("%lld
    ",lastans);
    33     }
    34 }
    View Code
  • 相关阅读:
    apache
    zabbix 问题
    node起步
    记录一次利用cropperjs修建图片并上传的过程
    vue走过的那些坑
    关于vue传参问题
    mybatis的走过的坑
    通常如何对网站的文件和资源进行优化?
    一个页面从输入URL到页面加载显示完成,这个过程都发生什么?
    JQuery---过滤器
  • 原文地址:https://www.cnblogs.com/hzoi-DeepinC/p/11597094.html
Copyright © 2020-2023  润新知