zoukankan      html  css  js  c++  java
  • 2017/8/10 考试吐槽

    2017 8 10 成绩:70

    不想吐槽什么了……没心情……感觉自己快要炸没了……

    A、Evensgn剪树枝

    题意:节点分为两种,求将整个树分为几部分,每部分有且仅有一个第二种节点方案数。

    树归……$f[n][0/1]$表示这个节点所在部分没有/有第二种节点……

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<vector>
     6 using namespace std;
     7 const long long mod=1e9+7,maxn=100005;
     8 int n,val[maxn],fa[maxn];
     9 long long f[maxn][2];
    10 vector<int>son[maxn];
    11 long long qpow(int val,int tim)
    12 {
    13     long long x=val,tmp=1;
    14     for(;tim;tim>>=1,x=x*x%mod)
    15         if(tim&1)tmp=tmp*x%mod;
    16     return tmp;
    17 }
    18 void dfs(int root)
    19 {
    20     if(val[root])f[root][0]=0,f[root][1]=1;
    21     else f[root][0]=1,f[root][1]=0;
    22     for(int i=0;i<son[root].size();i++)
    23     {
    24         dfs(son[root][i]);
    25         f[son[root][i]][0]+=f[son[root][i]][1];f[son[root][i]][0]%=mod;
    26         if(!val[root])f[root][0]=(f[root][0]*f[son[root][i]][0])%mod;
    27         else f[root][1]=(f[root][1]*f[son[root][i]][0])%mod;
    28     }
    29     if(!val[root])
    30         for(int i=0;i<son[root].size();i++)
    31             if(f[son[root][i]][0])f[root][1]=(f[root][1]+(f[root][0]*qpow(f[son[root][i]][0],mod-2)%mod*f[son[root][i]][1])%mod)%mod;
    32             else f[root][1]=(f[root][1]+f[root][0]*f[son[root][i]][1]%mod)%mod; 
    33 }
    34 int haha()
    35 {
    36     //freopen("tree7.in","r",stdin);
    37     //freopen("tree.out","w",stdout);
    38     scanf("%d",&n);
    39     for(int i=2;i<=n;i++)
    40     {
    41         scanf("%d",&fa[i]);fa[i]++;
    42         son[fa[i]].push_back(i);
    43     }
    44     for(int i=1;i<=n;i++)scanf("%d",&val[i]);
    45     dfs(1);
    46     printf("%lld
    ",f[1][1]);
    47 }
    48 int sb=haha();
    49 int main(){;}
    A

    B、公主的朋友

    题意:区间动态查询有几个某种元素,动态修改。

    线(fen)段(kuai)树(luan)可(gao)以(jiu)通(neng)过

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 const int maxn=100005,maxk=320;
     8 int belong[maxn],st[maxk],en[maxk],sm[maxk][305],se[maxk],a[maxn],n,m,t,size,cnt;
     9 int query(int l,int r)
    10 {
    11     int reli=se[belong[l]]>0?se[belong[l]]:a[l];
    12     int ans=0;
    13     if(belong[r]-belong[l]>=2)
    14         for(int i=belong[l]+1;i<=belong[r]-1;i++)
    15             if(se[i])ans+=((se[i]==reli)?size:0);
    16             else ans+=sm[i][reli];
    17     if(se[belong[l]])ans+=min(en[belong[l]],r)-l;
    18     else for(int i=l+1;i<=min(en[belong[l]],r);i++)ans+=(a[i]==reli);
    19     if(belong[l]==belong[r])return ans;
    20     if(se[belong[r]])ans+=((se[belong[r]]==reli)?r-st[belong[r]]+1:0);
    21     else for(int i=st[belong[r]];i<=r;i++)ans+=(a[i]==reli);
    22     return ans;
    23 }
    24 void modify(int l,int r)
    25 {
    26     int reli=(se[belong[l]]>0?se[belong[l]]:a[l]);
    27     for(int i=belong[l]+1;i<=belong[r]-1;i++)se[i]=reli;
    28     if(!se[belong[l]])
    29         for(int i=l+1;i<=min(en[belong[l]],r);i++)
    30         {
    31             sm[belong[l]][a[i]]--;
    32             a[i]=reli;
    33             sm[belong[l]][reli]++;
    34         }
    35     if(belong[l]==belong[r])return;
    36     if(!se[belong[r]])
    37         for(int i=st[belong[r]];i<=r;i++)
    38         {
    39             sm[belong[r]][a[i]]--;
    40             a[i]=reli;
    41             sm[belong[r]][reli]++;
    42         }
    43     if(se[belong[r]]&&se[belong[r]]!=reli)
    44     {
    45         for(int i=1;i<=m;i++)sm[belong[r]][i]=((i==se[belong[r]])?en[belong[r]]-st[belong[r]]+1:0);
    46         for(int i=st[belong[r]];i<=en[belong[r]];i++)a[i]=se[belong[r]];
    47         se[belong[r]]=0;
    48         for(int i=st[belong[r]];i<=r;i++)
    49         {
    50             sm[belong[r]][a[i]]--;
    51             a[i]=reli;
    52             sm[belong[r]][reli]++;
    53         }
    54     }
    55 }
    56 int haha()
    57 {
    58    //freopen("friend1.in","r",stdin);
    59    //freopen("friend.out","w",stdout);
    60    scanf("%d%d",&n,&m);
    61    size=(int)sqrt(n);cnt=n/size+(n%size?1:0);
    62    for(int i=1;i<=n;i++)
    63    {
    64        belong[i]=(i-1)/size+1;
    65        scanf("%d",&a[i]);sm[belong[i]][a[i]]++;
    66    }
    67    for(int i=1;i<=cnt;i++)st[i]=(i-1)*size+1,en[i]=min(i*size,n);
    68    scanf("%d",&t);
    69    for(int i=1;i<=t;i++)
    70    {
    71        int x,y;scanf("%d%d",&x,&y);
    72        printf("%d
    ",query(x,y));
    73        modify(x,y);
    74    }
    75 }
    76 int sb=haha();
    77 int main(){;}
    B

    C、Function

    题意:求出不同位置上多个二次函数最大值。

    扫(li)描(xian)线(gao)可过

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 const int maxn=1005,maxk=2e5+5;
     7 long long a[maxn],b[maxn],c[maxn],n,q;
     8 long long f(long long x)
     9 {
    10     long long fa=a[1]*x*x+b[1]*x+c[1];
    11     for(int i=2;i<=n;i++)
    12         fa=max(fa,1ll*a[i]*x*x+b[i]*x+c[i]);
    13     return fa;
    14 }
    15 int tim[maxk*5];long long fa[maxk];
    16 int haha()
    17 {
    18     //freopen("function3.in","r",stdin);
    19     //freopen("function.out","w",stdout);
    20     scanf("%d%d",&n,&q);
    21     for(int i=1;i<=n;i++)scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
    22     for(int i=1;i<=q;i++)
    23     {
    24         int x;scanf("%d",&x);
    25         tim[i]=x;
    26     }
    27     for(int i=-1e5;i<=1e5;i++)fa[i+(int)1e5]=f(1ll*i);
    28     for(int i=1;i<=q;i++)printf("%lld
    ",fa[tim[i]+(int)1e5]);
    29 }
    30 int sb=haha();
    31 int main(){;}
    C
  • 相关阅读:
    BufferedOutputStream
    BufferedInputStream
    IO异常 的处理
    FileOutStream
    FileInputStream
    File常用的方法
    IO流
    枚举
    jdk1.5新特性之-----自动装箱与自动拆箱
    jdk1.5新特性之------->可变参数
  • 原文地址:https://www.cnblogs.com/Loser-of-Life/p/7341228.html
Copyright © 2011-2022 走看看