zoukankan      html  css  js  c++  java
  • 牛客小白月赛2

    https://www.nowcoder.com/acm/contest/86#question

    所有代码:

    https://pan.baidu.com/s/1B0a4CZ6HFev0iwDdtDwBcA

    A.

    传说中的随机化方法找答案,直到找到答案

    适合于成功率不少的方法

    类似:

    一个区域内撒点

    B.

    几何题

    避免k=0和k=无穷

    C.

    如Codeblocks,

    Ctrl+R  , 变为 “,”

    D.

    正常:dfs

    idea:

    如果n过大,用dfs可能超时(保存函数状态),可以使用bfs。

    一轮bfs,从根节点出发,获得边的父亲、节点关系。

    一轮bfs,从叶子节点出发,数组存储节点的状态(子节点反馈信息给父节点)。

    注意father[root]=0(有多组数据)

    I.

    注意愉悦度小于0的时候不选。

    Way1

    以一个时间开始,到下一个时间,最多只有两个节目(分别在两个舞台)

    i,j两变量递增,代表两个舞台

    容易写错

    写之前理清思路

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <time.h>
     6 #include <string>
     7 #include <set>
     8 #include <map>
     9 #include <list>
    10 #include <stack>
    11 #include <queue>
    12 #include <vector>
    13 #include <bitset>
    14 #include <ext/rope>
    15 #include <algorithm>
    16 #include <iostream>
    17 using namespace std;
    18 #define ll long long
    19 #define minv 1e-6
    20 #define inf 1e9
    21 #define pi 3.1415926536
    22 #define E  2.7182818284
    23 const ll mod=1e9+7;//998244353
    24 const int maxn=1e5+10;
    25 
    26 struct node
    27 {
    28     int x,v;
    29 }p[maxn],q[maxn];
    30 
    31 int cmp(node a,node b)
    32 {
    33     return a.x<b.x;
    34 }
    35 
    36 int main()
    37 {
    38     int n,m,T,i,j,pos,t,v;
    39     ll sum=0;
    40     scanf("%d%d%d",&n,&m,&T);
    41     for (i=1;i<=n;i++)
    42         scanf("%d%d",&p[i].x,&p[i].v);
    43     for (i=1;i<=m;i++)
    44         scanf("%d%d",&q[i].x,&q[i].v);
    45     sort(p+1,p+n+1,cmp);
    46     sort(q+1,q+m+1,cmp);
    47 
    48     i=1,j=1;pos=0;
    49     p[n+1].x=q[m+1].x=T;
    50     while (i<=n && j<=m)
    51     {
    52         t=min(p[i+1].x,q[j+1].x);
    53         v=max(p[i].v,q[j].v);
    54         if (t>=T)
    55         {
    56             if (v>0)
    57                 sum+=1ll*v*(T-pos);
    58             break;
    59         }
    60         if (v>0)
    61             sum+=1ll*v*(t-pos);
    62         pos=t;
    63         if (p[i+1].x<q[j+1].x)
    64             i++;
    65         else if (p[i+1].x>q[j+1].x)
    66             j++;
    67         else
    68             i++,j++;
    69     }
    70     cout<<sum;
    71     return 0;
    72 }
    73 /*
    74 1 2 5
    75 0 3
    76 0 1
    77 2 5
    78 21
    79 
    80 1 3 5
    81 0 3
    82 0 1
    83 2 5
    84 3 1
    85 17
    86 
    87 1 1 1000000000
    88 0 100
    89 0 100
    90 */

    Way2

    舞台切换没有代价,所以认为算同一时间内最优的即可

    使用排序+离散化

    对于一个舞台,所有节目的和小于等于总体(O(n))

      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <cmath>
      4 #include <cstring>
      5 #include <time.h>
      6 #include <string>
      7 #include <set>
      8 #include <map>
      9 #include <list>
     10 #include <stack>
     11 #include <queue>
     12 #include <vector>
     13 #include <bitset>
     14 #include <ext/rope>
     15 #include <algorithm>
     16 #include <iostream>
     17 using namespace std;
     18 #define ll long long
     19 #define minv 1e-6
     20 #define inf 1e9
     21 #define pi 3.1415926536
     22 #define E  2.7182818284
     23 const ll mod=1e9+7;//998244353
     24 const int maxn=2e5+10;
     25 
     26 struct node
     27 {
     28     int x,v;
     29 }p[maxn],q[maxn];
     30 int a[maxn],v[maxn],t[maxn];
     31 
     32 int cmp(node a,node b)
     33 {
     34     return a.x<b.x;
     35 }
     36 
     37 int main()
     38 {
     39     int n,m,T,i,j,k,g=0;
     40     ll sum=0;
     41     scanf("%d%d%d",&n,&m,&T);
     42 
     43     for (i=1;i<=n;i++)
     44         scanf("%d%d",&p[i].x,&p[i].v);
     45     sort(p+1,p+n+1,cmp);
     46 
     47     for (i=1;i<=m;i++)
     48         scanf("%d%d",&q[i].x,&q[i].v);
     49     sort(q+1,q+m+1,cmp);
     50 
     51     for (i=1;i<=n;i++)
     52         t[++g]=p[i].x;
     53     for (i=1;i<=m;i++)
     54         t[++g]=q[i].x;
     55     t[++g]=T;
     56     sort(t+1,t+g+1);
     57 
     58     j=0;
     59     t[0]=-1;
     60     for (i=1;i<=g;i++)
     61         if (t[i]!=t[i-1])
     62             a[++j]=t[i];
     63 
     64     for (i=2;i<=g;i++)
     65         v[k]=-inf;
     66     p[n+1].x=max(p[n].x,T);
     67     j=1;
     68     for (i=1;i<=n;i++)
     69     {
     70         while (a[j]!=p[i].x)
     71             j++;
     72         k=j;
     73         while (a[k]!=p[i+1].x)
     74         {
     75             k++;
     76             v[k]=max(v[k],p[i].v);
     77         }
     78     }
     79 
     80     q[m+1].x=max(q[m].x,T);
     81     j=1;
     82     for (i=1;i<=m;i++)
     83     {
     84         while (a[j]!=q[i].x)
     85             j++;
     86         k=j;
     87         while (a[k]!=q[i+1].x)
     88         {
     89             k++;
     90             v[k]=max(v[k],q[i].v);
     91         }
     92     }
     93 
     94     for (i=2;i<=g;i++)
     95     {
     96         if (a[i]>=T)
     97         {
     98             if (v[i]>0)
     99                 sum+=1ll*v[i]*(T-a[i-1]);
    100             break;
    101         }
    102         if (v>0)
    103             sum+=1ll*v[i]*(a[i]-a[i-1]);
    104     }
    105     cout<<sum;
    106     return 0;
    107 }
    108 /*
    109 1 2 5
    110 0 3
    111 0 1
    112 2 5
    113 25
    114 */
  • 相关阅读:
    centos7 设置mongodb远程连接
    计算两个坐标点之间的点的坐标
    vim 设置字体和解决乱码
    webpack无法通过 IP 地址访问 localhost 解决方案
    使用GitHub作为Maven仓库并引用
    ajax 文件下载
    展开被 SpringBoot 玩的日子 《 六 》 整合 Mybatis
    展开被 SpringBoot 玩的日子 《 五 》 spring data jpa 的使用
    展开被 SpringBoot 玩的日子 《 四 》 Session 会话共享
    展开被 SpringBoot 玩的日子 《 三 》 整合Redis
  • 原文地址:https://www.cnblogs.com/cmyg/p/9520526.html
Copyright © 2011-2022 走看看