zoukankan      html  css  js  c++  java
  • [考试反思]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
  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/hzoi-DeepinC/p/11597094.html
Copyright © 2011-2022 走看看