• Codeforces Round #267 (Div. 2)


    A

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 using namespace std;
    11 #define N 100000
    12 #define LL long long
    13 #define INF 0xfffffff
    14 const double eps = 1e-8;
    15 const double pi = acos(-1.0);
    16 const double inf = ~0u>>2;
    17 int main()
    18 {
    19     int n,i,j;
    20     int ans = 0;
    21     cin>>n;
    22     for(i = 1; i <= n; i++)
    23     {
    24         int x,y;
    25         scanf("%d%d",&x,&y);
    26         if(y-x>=2) ans++;
    27     }
    28     cout<<ans<<endl;
    29     return 0;
    30 }
    View Code

    B

    还以为是间接的朋友,写复杂了,没想到那么简单。

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 using namespace std;
    11 #define N 1010
    12 #define LL long long
    13 #define INF 0xfffffff
    14 const double eps = 1e-8;
    15 const double pi = acos(-1.0);
    16 const double inf = ~0u>>2;
    17 int a[N];
    18 int fa[N];
    19 int r[N];
    20 int find(int x)
    21 {
    22     if(x!=fa[x])
    23     {
    24         fa[x] = find(fa[x]);
    25         return fa[x];
    26     }
    27     return x;
    28 }
    29 int main()
    30 {
    31     int n,m,k,i,j;
    32     cin>>n>>m>>k;
    33     for(i = 1 ;i <= m+1; i++) {fa[i] = i;r[i] = 1;}
    34     for(i = 1; i <= m+1; i++)
    35     scanf("%d",&a[i]);
    36     int ans = 0;
    37     for(i = 1 ; i <= m; i++)
    38     {
    39         int cnt = 0;
    40         for(int g = 0 ; g < n ;g++)
    41             if((a[m+1]&(1<<g))!=(a[i]&(1<<g))) cnt++;
    42             if(cnt<=k) ans++;
    43     }
    44 //    for(i = 1; i <= m+1; i++)
    45 //        for(j = 1; j <= m+1; j++)
    46 //        {
    47 //            if(i==j) continue;
    48 //            int cnt = 0;
    49 //            for(int g = 0 ; g < n ;g++)
    50 //            if((i&(1<<g))!=(i&(1<<g))) cnt++;
    51 //            if(cnt<=k)
    52 //            {
    53 //                int tx = find(i);
    54 //                int ty = find(j);
    55 //                if(tx!=ty)
    56 //                {
    57 //                    fa[tx] = ty;
    58 //                    r[tx]+=r[ty];
    59 //                }
    60 //            }
    61 //        }
    62 //    int kk = find(m+1);
    63     cout<<ans<<endl;
    64     return 0;
    65 }
    View Code

     C

    简单dp

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 using namespace std;
    11 #define N 5010
    12 #define LL long long
    13 #define INF 0xfffffff
    14 const double eps = 1e-8;
    15 const double pi = acos(-1.0);
    16 const double inf = ~0u>>2;
    17 int a[N];
    18 LL dp[N][N];
    19 LL sum[N];
    20 int main()
    21 {
    22     int n,m,k,i,j;
    23     cin>>n>>m>>k;
    24     for(i = 1; i <= n;  i++)
    25     {
    26         scanf("%d",&a[i]);
    27         sum[i] = sum[i-1]+a[i];
    28     }
    29     for(i = m; i <= n ;i++)
    30     {
    31         for(j = 1; j <= k; j++)
    32         dp[i][j] = max(dp[i-m][j-1]+sum[i]-sum[i-m],dp[i-1][j]);
    33     }
    34     cout<<dp[n][k]<<endl;
    35     return 0;
    36 }
    View Code

    D

    tarjan缩点+dfs

    dfs的时候少写了else里面的内容。。一直wa到结束

      1 #include <iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<stdlib.h>
      6 #include<vector>
      7 #include<cmath>
      8 #include<queue>
      9 #include<set>
     10 #include<map>
     11 #include<stack>
     12 using namespace std;
     13 #define N 500010
     14 #define M 500010
     15 #define LL long long
     16 #define INF 0xfffffff
     17 const double eps = 1e-8;
     18 const double pi = acos(-1.0);
     19 const double inf = ~0u>>2;
     20 struct node
     21 {
     22     int u,v,next,w;
     23 } edge[M];
     24 int t,low[N],pre[N],sccno[N],head[N],scc,dep,vis[N],dis[N];
     25 int dd1[N],dd2[N];
     26 int dp[N];
     27 int num[N],de[N];
     28 vector<int>cd[N];
     29 void init()
     30 {
     31     t = 0;
     32     memset(head,-1,sizeof(head));
     33 }
     34 void add(int u,int v)
     35 {
     36     edge[t].u  =u;
     37     edge[t].v = v;
     38     edge[t].next = head[u];
     39     head[u] = t++;
     40 }
     41 stack<int>s;
     42 void dfs(int u)
     43 {
     44     low[u] = pre[u] = ++dep;
     45     s.push(u);
     46     for(int i = head[u] ; i!=-1 ; i = edge[i].next)
     47     {
     48         int v = edge[i].v;
     49         if(!pre[v])
     50         {
     51             dfs(v);
     52             low[u] = min(low[u],low[v]);
     53         }
     54         else if(!sccno[v])
     55             low[u] = min(low[u],pre[v]);
     56     }
     57     if(low[u]==pre[u])
     58     {
     59         scc++;
     60         int minz = INF,sum=INF;
     61         for(;;)
     62         {
     63             int x = s.top();
     64             s.pop();
     65             if(minz>num[x])
     66             {
     67                 minz = num[x];
     68                 sum = dp[x];
     69             }
     70             else if(minz==num[x]) sum = min(dp[x],sum);
     71             sccno[x] = scc;
     72             if(x==u)break;
     73         }
     74         dd1[scc] = minz;
     75         dd2[scc] = sum;
     76 
     77     }
     78 }
     79 void find_scc(int n)
     80 {
     81     scc=0;
     82     dep=0;
     83     memset(low,0,sizeof(low));
     84     memset(pre,0,sizeof(pre));
     85     memset(sccno,0,sizeof(sccno));
     86     for(int i = 1; i <= n ; i++)
     87         if(!pre[i])
     88             dfs(i);
     89 }
     90 map<string,int>f;
     91 vector<int>ed[N];
     92 char s1[N],s2[N];
     93 int a[N];
     94 int judge(char *str)
     95 {
     96     int i,k;
     97     k= strlen(str);
     98     int cnt = 0;
     99     for(i = 0 ; i < k; i++)
    100         if(str[i]=='R')
    101             cnt++;
    102     return cnt;
    103 }
    104 int ddfs(int u)
    105 {
    106     int i,j;
    107     for(i = 0 ; i< ed[u].size() ; i++)
    108     {
    109         int v = ed[u][i];
    110         if(!vis[v])
    111         {
    112             vis[v] = 1;
    113             int ss = ddfs(v);
    114             if(dd1[u]>=ss)
    115             {
    116                 if(dd1[u]==ss)
    117                     dd2[u] = min(dd2[u],dd2[v]);
    118                 else dd2[u] = dd2[v];
    119                 dd1[u] = ss;
    120             }
    121         }
    122         else if(dd1[u]>=dd1[v])
    123         {
    124             if(dd1[u]==dd1[v]) dd2[u] = min(dd2[u],dd2[v]);
    125             else dd2[u] = dd2[v];
    126             dd1[u] = dd1[v];
    127         }
    128     }
    129     return dd1[u];
    130 }
    131 int main()
    132 {
    133     init();
    134     int m,i,j,n;
    135     scanf("%d",&m);
    136     int g = 0;
    137     for(i = 1; i <= m ; i++)
    138     {
    139         scanf("%s",s1);
    140         int len = strlen(s1);
    141         for(j = 0 ; j <  len; j++) if(s1[j]>='a'&&s1[j]<='z') s1[j]-=32;
    142         if(!f[s1])
    143         {
    144             a[i] = ++g;
    145             f[s1] = g;
    146         }
    147         else a[i] = f[s1];
    148         num[a[i]] = judge(s1);
    149         dp[a[i]] = len;
    150     }
    151     scanf("%d",&n);
    152     for( i =1 ; i <= n ; i++)
    153     {
    154         int u,v;
    155         scanf("%s%s",s1,s2);
    156         int len1 =strlen(s1) ,len2 = strlen(s2);
    157         for(j = 0 ; j <  len1; j++) if(s1[j]>='a'&&s1[j]<='z') s1[j]-=32;
    158         for(j = 0 ; j <  len2; j++) if(s2[j]>='a'&&s2[j]<='z') s2[j]-=32;
    159         if(!f[s1])
    160         {
    161             u = ++g;
    162             f[s1] = g;
    163         }
    164         else u = f[s1];
    165         if(!f[s2])
    166         {
    167             v = ++g;
    168             f[s2] = g;
    169         }
    170         else v = f[s2];
    171         add(u,v);
    172         num[u] = judge(s1);
    173         num[v] = judge(s2);
    174         dp[u] = len1;
    175         dp[v] = len2;
    176         cd[u].push_back(v);
    177     }
    178     find_scc(g);
    179     for(i = 1 ; i <= g; i++)
    180     {
    181         int u = sccno[i];
    182         for(j = 0 ;j < cd[i].size() ; j++)
    183         {
    184             int v = sccno[cd[i][j]];
    185             if(v==u) continue;
    186             ed[u].push_back(v);
    187             de[v] = 1;
    188         }
    189     }
    190     memset(vis,0,sizeof(vis));
    191     for(i = 1 ; i <= scc; i++)
    192     {
    193         if(!de[i])
    194         {
    195             vis[i] = 1;
    196             ddfs(i);
    197         }
    198     }
    199     LL ans = 0,sum=0;
    200     for(i = 1 ; i<= m; i++)
    201     {
    202         int u = sccno[a[i]];
    203         //cout<<u<<" "<<dd2[u]<<endl;
    204         ans+=dd1[u];
    205         sum+=dd2[u];
    206     }
    207     cout<<ans<<" "<<sum<<endl;
    208     return 0;
    209 }
    View Code
  • 相关阅读:
    php hook example
    sql 建立数据库,表格,索引,主键
    js 高级函数 之示例
    js 事件
    DOM 操作内容 innerText/innerHTML
    DOM 之 document 查找元素方法
    BOM 之 screen history
    Hadoop源码篇--Client源码
    Spark算子篇 --Spark算子之combineByKey详解
    Pandas库的使用--Series
  • 原文地址:https://www.cnblogs.com/shangyu/p/3981462.html
Copyright © 2020-2023  润新知