zoukankan      html  css  js  c++  java
  • Codeforces Round #168 (Div. 2)

      A.模拟。

      B.数据小,模拟。

      C.给定一个数组,要求使得数组中不存在两个数相差k倍,问数组中最大的数的个数。先排序,然后从前往后找倍数相差为k的数,二分查找。

    View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<string>
     7 #include<queue>
     8 #include<stack>
     9 #include<vector>
    10 #include<map>
    11 using namespace std;
    12 #define LL __int64
    13 #define pii pair<int,int>
    14 #define Max(a,b) ((a)>(b)?(a):(b))
    15 #define Min(a,b) ((a)<(b)?(a):(b))
    16 #define mem(a,b) memset(a,b,sizeof(a))
    17 #define lson l,mid,rt<<1
    18 #define rson mid+1,r,rt<<1|1
    19 const int N=100010,INF=1000000000;
    20 
    21 int n,k;
    22 int num[N],fa[N],cou[N];
    23 
    24 int binary(int a,int up)
    25 {
    26     int l=0,r=up,mid;
    27     while(l<r){
    28         mid=l+(r-l)/2;
    29         if(num[mid]==a)return mid;
    30         else if(num[mid]<a)l=mid+1;
    31         else r=mid;
    32     }
    33     return -1;
    34 }
    35 
    36 int main()
    37 {
    38  //   freopen("in.txt","r",stdin);
    39     int i,j,w,ans;
    40     while(~scanf("%d%d",&n,&k))
    41     {
    42         ans=0;
    43         mem(cou,0);
    44         for(i=0;i<n;i++)scanf("%d",&num[i]);
    45         sort(num,num+n);
    46 
    47         for(i=0;i<n;i++){
    48             if(k!=1 && num[i]%k==0 && (w=binary(num[i]/k,i+1))!=-1)
    49                 fa[i]=fa[w];
    50             else fa[i]=i;
    51             cou[fa[i]]++;
    52         }
    53         for(i=0;i<n;i++)
    54             if(cou[i])ans+=((cou[i]+1)/2);
    55 
    56         printf("%d\n",ans);
    57     }
    58     return 0;
    59 }

      D.DFS,记录每个节点下面的所有子节点的操作的最大值和最下值然后更新即可。

    View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<string>
     7 #include<queue>
     8 #include<stack>
     9 #include<vector>
    10 #include<map>
    11 using namespace std;
    12 #define LL __int64
    13 #define pii pair<int,int>
    14 #define Max(a,b) ((a)>(b)?(a):(b))
    15 #define Min(a,b) ((a)<(b)?(a):(b))
    16 #define mem(a,b) memset(a,b,sizeof(a))
    17 #define lson l,mid,rt<<1
    18 #define rson mid+1,r,rt<<1|1
    19 #define abs(a) ((a)>0?(a):-(a))
    20 const int N=100010,INF=1000000000;
    21 
    22 struct Edge{
    23     int u,v;
    24 }e[N*2];
    25 
    26 int first[N],next[N*2],vis[N];
    27 int n,mt;
    28 LL ans,l[N][2],w[N];
    29 
    30 void adde(int a,int b)
    31 {
    32     e[mt].u=a,e[mt].v=b;
    33     next[mt]=first[a],first[a]=mt++;
    34     e[mt].u=b,e[mt].v=a;
    35     next[mt]=first[b],first[b]=mt++;
    36 }
    37 
    38 void dfs(int u)
    39 {
    40     int i,v;
    41     l[u][0]=Max(w[u],l[u][0]);
    42     l[u][1]=Min(w[u],l[u][1]);
    43     for(i=first[u];i!=-1;i=next[i]){
    44         v=e[i].v;
    45         if(!vis[v]){
    46             vis[v]=1;
    47             dfs(v);
    48             l[u][0]=Max(l[v][0],l[u][0]);
    49             l[u][1]=Min(l[v][1],l[u][1]);
    50         }
    51     }
    52     w[u]-=l[u][0]+l[u][1];
    53     if(w[u]>0)l[u][0]+=w[u];
    54     else l[u][1]+=w[u];
    55 }
    56 
    57 int main()
    58 {
    59  //   freopen("in.txt","r",stdin);
    60     int i,j,a,b;
    61     while(~scanf("%d",&n))
    62     {
    63         ans=mt=0;
    64         mem(first,-1);
    65         for(i=1;i<n;i++){
    66             scanf("%d%d",&a,&b);
    67             adde(a,b);
    68         }
    69         for(i=1;i<=n;i++)scanf("%I64d",&w[i]);
    70 
    71         mem(vis,0);
    72         mem(l,0);
    73         vis[1]=1;
    74         dfs(1);
    75 
    76         printf("%I64d\n",l[1][0]-l[1][1]);
    77     }
    78     return 0;
    79 }

      E.待续

  • 相关阅读:
    Kaggle & Machine Learning
    练习题目总结
    日常练习//算法类
    论文阅读
    codeforces专项
    10.26—11.1
    常见算法笔记
    DM/ML学习实践(一)
    Python常见代码
    HDU 4251 --- 主席树(划分树是正解)
  • 原文地址:https://www.cnblogs.com/zhsl/p/2954645.html
Copyright © 2011-2022 走看看