zoukankan      html  css  js  c++  java
  • [考试反思]1112csp-s模拟测试111:二重

    还是AK场。考前信心赛?

    而且T3的部分分还放反了所有80的都其实只有50。

    总算在AK场真正AK了一次。。。

    手感好,整场考试很顺利。要不是因为T3是原题可能就没这么好看了。

    20minT1,50minT2,去趟厕所回来70min想到T3,110min写完调完对拍完,然后去学skyh写平衡树了。

    然后我发现我不会写平衡树了。

    两场一计分:600/600/585/580/535/515/515/500///

    Day1考得不够好,Day2就还是反超不了啊。。。

    没关系这两个600的过两天直接联赛进营进队拿最优惠不是竞争对手挺过联赛我就是rank1了

    T1:物理课

    迭代都能A那就没得说了。。。等比数列求和还是会的

     1 #include<cstdio>
     2 #include<cmath>
     3 using namespace std;
     4 long double theta,d,v,g;
     5 int main(){
     6     freopen("physics.in","r",stdin);freopen("physics.out","w",stdout);
     7     int t;scanf("%d",&t);
     8     while(t--){
     9         scanf("%Lf%Lf%Lf%Lf",&theta,&v,&d,&g);theta/=180;theta*=3.141592653589793238;
    10         printf("%.5Lf
    ",2*sin(theta)*v*cos(theta)*v/g/(1-d*d));
    11     }
    12 }
    View Code

    T2:数学课

    可以打表(超可怜的说)。但是从含义出发比较简单。

    确定一个奇数的状态,那么它的任意偶数倍就都确定了,交替出现在AB集合中。

    然后区别就是你把多的和少的分别放在A里还是B里。

    如果多的和少的一样那么就不必考虑。设有pair0个,怎么放都一样所以方案数是$2^{pair0}$

    接下来是多的比少的多一个。设有pair1个。

    首先我们要知道这些选择的最小值是多少,设为Base。(在求出pair1和pair0的顺便弄一下就行,log的)

    那么多的比少的的贡献就是:因为要从pair1个里选出m-Base个,所以就是$C_{pair1}^{m-Base}$

    一个Lucas一个快速幂

     1 #include<cstdio>
     2 #define int long long
     3 #define mod 10000019
     4 int fac[10000020],inv[10000020];
     5 int C(int b,int t){return 0<=t&&t<=b?fac[b]*inv[t]%mod*inv[b-t]%mod:0;}
     6 int Lucas(int b,int t){return b<mod&&t<mod?C(b,t):Lucas(b/mod,t/mod)*C(b%mod,t%mod)%mod;}
     7 int qpow(int b,int t,int a=1){for(;t;b=b*b%mod,t>>=1)if(t&1)a=a*b%mod;return a;}
     8 main(){
     9     freopen("math.in","r",stdin);freopen("math.out","w",stdout);
    10     fac[0]=1;
    11     for(int i=1;i<mod;++i)fac[i]=fac[i-1]*i%mod;
    12     inv[mod-1]=qpow(fac[mod-1],mod-2);
    13     for(int i=mod-2;~i;--i)inv[i]=inv[i+1]*(i+1)%mod;
    14     int n,q,m,lst=0,p2=1ll<<60,pair1=0,pair0=0,Base=0;
    15     scanf("%lld%lld",&n,&q);
    16     for(int i=61;i;--i,p2>>=1){
    17         int num=n/p2,cnt;num=(num>>1)+(num&1);cnt=num-lst;lst=num;Base+=cnt*(i>>1);
    18         if(i&1)pair1+=cnt;else pair0+=cnt;
    19     }
    20     while(q--)scanf("%lld",&m),printf("%lld
    ",Lucas(pair1,m-Base)*qpow(2,pair0)%mod);
    21 }
    View Code

    T3:地理课

    第一反应:LCT。不会。

    后来一想,改变一下题意就是原题了。

    可以离线,所以只要把加边和删边的含义改变为“每条边只在一段时间内出现,其它时间消失”

    然后就可以当作《Dash Speed》做了。线段树分治+按秩合并并查集板子。(给自己之前的博客打广告2333)

     1 #include<cstdio>
     2 #include<vector>
     3 #include<map>
     4 using namespace std;
     5 #define mod 1000000007
     6 vector<pair<int,int> >v[400005];
     7 map<pair<int,int>,int>M;
     8 int opt[100005],a[100005],b[100005],edt[100005],n,m,ans=1,inv[100005],sz[100005];
     9 int stf[200005],stp[200005],strk[200005],rans[200005],top,f[100005],rk[100005],stsz[200005];
    10 pair<int,int>Pair(int a,int b){return a>b?make_pair(b,a):make_pair(a,b);}
    11 int find(int p){return f[p]==p?p:find(f[p]);}
    12 void merge(pair<int,int>P){
    13     int a=find(P.first),b=find(P.second);
    14     if(a==b)return;
    15     stp[++top]=a;stf[top]=f[a];stsz[top]=sz[a];strk[top]=rk[a];rans[top]=ans;
    16     stp[++top]=b;stf[top]=f[b];stsz[top]=sz[b];strk[top]=rk[b];rans[top]=ans;
    17     ans=1ll*ans*inv[sz[a]]%mod*inv[sz[b]]%mod*(sz[a]+sz[b])%mod;
    18     if(rk[a]<rk[b])f[a]=b,sz[b]+=sz[a],rk[b]+=rk[a]==rk[b];
    19     else f[b]=a,sz[a]+=sz[b],rk[a]+=rk[a]==rk[b];
    20 }
    21 void add(pair<int,int>P,int p,int l,int r,int cl=1,int cr=m){
    22     if(l<=cl&&cr<=r){v[p].push_back(P);return;}
    23     if(l<=cl+cr>>1)add(P,p<<1,l,r,cl,cl+cr>>1);
    24     if(r>cl+cr>>1)add(P,p<<1|1,l,r,(cl+cr>>1)+1,cr);
    25 }
    26 void Divide_and_Conquer(int p,int l,int r){
    27     int tp=top;
    28     for(int i=0;i<v[p].size();++i)merge(v[p][i]);
    29     if(l==r)printf("%d
    ",ans);
    30     else Divide_and_Conquer(p<<1,l,l+r>>1),Divide_and_Conquer(p<<1|1,(l+r>>1)+1,r);
    31     while(top>tp){
    32         int x=stp[top];
    33         sz[x]=stsz[top];rk[x]=strk[top];f[x]=stf[top];ans=rans[top];top--;
    34     }
    35 }
    36 int main(){freopen("geography.in","r",stdin);freopen("geography.out","w",stdout);
    37     scanf("%d%d",&n,&m);
    38     for(int i=1;i<=m;++i)scanf("%d%d%d",&opt[i],&a[i],&b[i]);
    39     inv[1]=1;
    40     for(int i=2;i<=n;++i)inv[i]=mod-1ll*mod/i*inv[mod%i]%mod;
    41     for(int i=1;i<=n;++i)f[i]=i,rk[i]=sz[i]=1;
    42     for(int i=m;i;--i)if(opt[i]==2)M[Pair(a[i],b[i])]=i;
    43         else edt[i]=M[Pair(a[i],b[i])];
    44     for(int i=1;i<=m;++i)if(opt[i]==1)add(Pair(a[i],b[i]),1,i,edt[i]?edt[i]-1:m);
    45     Divide_and_Conquer(1,1,m);
    46 }
    View Code

    T4:普通平衡树

    没调出来。爆零了。

  • 相关阅读:
    PTA 5-3 树的同构 ——理解递归
    停车管理系统
    两个有序链表序列的合并 (15分)
    lua 面向对象笔记 继承 和 组合
    二叉树高度计算,判定是否为平衡二叉树
    会用git的重要性,记工作中使用git reset 代码丢失的教训
    #include <bits/stdc++.h> 万能头文件
    C++中类的静态变量成员
    C++创建对象加括号和不加括号的区别
    deepin(深度系统)安装微信 qq
  • 原文地址:https://www.cnblogs.com/hzoi-DeepinC/p/11840934.html
Copyright © 2011-2022 走看看