zoukankan      html  css  js  c++  java
  • 第四周 6.7-6.13

    6.7

    可怕的一周从BC开始。

    hdu5265 pog loves szh II

    只是想写一个二分。然被骇。

    错误还不止一个。

    1.没用LL

    2.ans初值赋错

     1 # include <iostream>
     2 # include <cstdio>
     3 # include <algorithm>
     4 typedef long long LL;
     5 using namespace std;
     6 LL a[100005];
     7 
     8 int main(void)
     9 {
    10     int n;LL p;
    11     while(cin>>n>>p)
    12     {
    13         for(int i=0;i<n;i++)
    14         {
    15             scanf("%d",a+i);
    16             a[i]=a[i]%p;
    17         }
    18         sort(a,a+n);
    19         LL ans=(a[n-2]+a[n-1])%p;
    20         for(int i=0;i<n;i++)
    21         {
    22             if(a[i]>p/2) break;
    23             int L=i+1,R=n-1,mid;
    24             while(L<=R)
    25             {
    26                 mid=(L+R)/2;
    27                 if(a[mid]+a[i]>=p) R=mid-1;
    28                 else L=mid+1;
    29             }
    30             if(R>i&&a[i]+a[R]<p) ans=max(ans,a[i]+a[R]);
    31         }
    32         printf("%d
    ",ans);
    33     }
    34     return 0;
    35 }
    Aguin

    第三题是一个 最近公共祖先

    后来反正写不出来了。就去学习了一下。

    理解能力差。看了好几篇没懂。

    后来看到一篇不怎么长的但是很直观。

    Link:http://scturtle.is-programmer.com/posts/30055.html

    6.8

    POJ 1330 Nearest Common Ancestors LCA

    本来是打BC碰到LCA想学习一下。然而发现那个题比较复杂。

    就暂且放那不管了。

    写了一个简单的。但是只有一个query。连做模板都不合适阿。

    写的时候并查集没有带秩。

     1 # include <iostream>
     2 # include <cstdio>
     3 # include <cstring>
     4 # include <vector>
     5 using namespace std;
     6 # define maxn 10000+5
     7 # define CLR(x) memset(x,0,sizeof(x))
     8 vector <int> vec[maxn];
     9 int pa[maxn],ind[maxn],begin,end;
    10 bool vis[maxn];
    11 
    12 int fa(int x)
    13 {
    14     return pa[x]==x?x:pa[x]=fa(pa[x]);
    15 }
    16 
    17 void LCA(int x)
    18 {
    19     for(int i=0;i<vec[x].size();i++)
    20     {
    21         LCA(vec[x][i]);
    22         pa[fa(vec[x][i])]=x;
    23     }
    24     vis[x]=1;
    25     if(x==begin&&vis[end]) printf("%d
    ",fa(end));
    26     else if(x==end&&vis[begin]) printf("%d
    ",fa(begin));
    27     return;
    28 }
    29 
    30 int main(void)
    31 {
    32     int T;cin>>T;
    33     while(T--)
    34     {
    35         int N;scanf("%d",&N);
    36         CLR(vis); CLR(ind);
    37         for(int i=1;i<=N;i++) {vec[i].clear(); pa[i]=i;}
    38         for(int i=1;i<N;i++)
    39         {
    40             int from,to; scanf("%d%d",&from,&to);
    41             vec[from].push_back(to);
    42             ind[to]++;
    43         }
    44         scanf("%d%d",&begin,&end);
    45         for(int i=1;i<=N;i++)
    46             if(!ind[i]) { LCA(i); break; }
    47     }
    48     return 0;
    49 }
    Aguin

    6.9

    想尝试hdu5266但是不会处理多点的LCA。

    自己测数据在devcpp下跑到25000层的时候爆栈。

    加黑科技交C++自然是T的。

    毕竟学的少 有能力了在搞。

    附个失败品。

     1 # pragma comment(linker, "/STACK:1024000000,1024000000")
     2 # include <iostream>
     3 # include <cstdio>
     4 # include <cstring>
     5 using namespace std;
     6 # define maxn 300000+10
     7 # define CLR(x) memset(x,0,sizeof(x))
     8 int Q,t,pa[maxn],Ql[maxn],Qr[maxn],time[maxn],ans[maxn];
     9 int start[maxn],to[2*maxn],Next[2*maxn];
    10 bool vis[maxn];
    11 
    12 int fa(int x)
    13 {
    14     return pa[x]==x?x:pa[x]=fa(pa[x]);
    15 }
    16 
    17 void LCA(int x)
    18 {
    19     time[x]=++t;
    20     int tem=start[x];
    21     while(tem)
    22     {
    23         if(!time[to[tem]])
    24         {
    25             LCA(to[tem]);
    26             pa[to[tem]]=x;
    27         }
    28         tem=Next[tem];
    29     }
    30     vis[x]=1;
    31     for(int i=0;i<Q;i++)
    32         if(x>=Ql[i]&&x<=Qr[i])
    33         {
    34             int ok=1,min=maxn,pos;
    35             for(int j=Ql[i];j<=Qr[i];j++)
    36                 if(time[j]){ if(min>time[j]) {min=time[j];pos=j;} }
    37                 else{ok=0;break;}
    38             if(ok) ans[i]=fa(pos);
    39         }
    40     return;
    41 }
    42 
    43 int main(void)
    44 {
    45 //    freopen("data.in","r",stdin);
    46     int n;
    47     while((scanf("%d",&n))!=EOF)
    48     {
    49         CLR(vis); CLR(time); CLR(start);
    50         for(int i=1;i<=n;i++) pa[i]=i;
    51         for(int i=1;i<2*n-1;i+=2)
    52         {
    53             int FROM,TO; scanf("%d%d",&FROM,&TO);
    54             to[i]=TO; Next[i]=start[FROM]; start[FROM]=i;
    55             to[i+1]=FROM; Next[i+1]=start[TO]; start[TO]=i+1;
    56         }
    57         scanf("%d",&Q);
    58         for(int i=0;i<Q;i++) scanf("%d%d",Ql+i,Qr+i);
    59         t=0; LCA(1);
    60         for(int i=0;i<Q;i++) printf("%d
    ",ans[i]);
    61     }
    62     return 0;
    63 }
    Aguin

    6.10-6.13

    什么都没干。

  • 相关阅读:
    多轨车皮编序问题
    [Luogu1032] 字串变换
    [POJ1101] The Game
    Linux 下源码编译FFMEG
    交叉编译 tcpdump
    现代电视原理-电视传像原理
    Dos:‘锘緻echo’ 不是内部或外部命令,也不是可运行的程序或批处理文件
    Win7 登入壁纸修改
    Office 2016安装后的优化设置
    Linux 系统目录结构
  • 原文地址:https://www.cnblogs.com/Aguin/p/4559710.html
Copyright © 2011-2022 走看看