2018 计蒜之道 初赛 第一场

百度无人车

二分

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 2e4 + 10;
LL a[maxn];

int main(){
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) scanf("%lld", a + i);
    LL p, s;
    scanf("%lld %lld", &p, &s);
    int l = 1, r = 20000;
    while(l < r){
        int mid = (l + r) >> 1;
        LL t = 0;
        for(int i = 1; i <= n; ++i) t += max(0LL, a[i] - mid);
        if(t * p <= s) r = mid;
        else l = mid + 1;
    }
    printf("%d\n", r);
    return 0;
}

Aguin

百度科学家

主席树建图

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 typedef long long LL;
  4 const int maxn = 1e5 + 10;
  5 int a[maxn];
  6
  7 LL f[maxn * 35];
  8
  9 // Persistent SegmentTree
 10 vector<int> G[maxn * 35];
 11
 12 struct node {
 13     int tag, ls, rs;
 14 } nod[maxn * 35];
 15
 16 int cnt;
 17 int id[maxn];
 18 void build(int p, int tl, int tr){
 19     cnt++;
 20     if(tl == tr){
 21         id[tl] = p;
 22         nod[p].tag = a[tl];
 23         return;
 24     }
 25     int mid = (tl + tr) >> 1;
 26     nod[p].ls = cnt + 1, G[p].push_back(cnt + 1), build(cnt + 1, tl, mid);
 27     nod[p].rs = cnt + 1, G[p].push_back(cnt + 1), build(cnt + 1, mid + 1, tr);
 28 }
 29 void update(int l, int r, int &x, int y, int pos, int v) {
 30     nod[++cnt] = nod[y];
 31     x = cnt;
 32     if (l == r) {
 33         id[l] = x;
 34         nod[x].tag = v;
 35         return;
 36     }
 37     int mid = (l + r) >> 1;
 38     if (pos <= mid) update(l, mid, nod[x].ls, nod[y].ls, pos, v);
 39     else update(mid + 1, r, nod[x].rs, nod[y].rs, pos, v);
 40     G[x].push_back(nod[x].ls);
 41     G[x].push_back(nod[x].rs);
 42 }
 43 void query(int p, int tl, int tr, int l, int r, int x)
 44 {
 45     if(tr < l || r < tl) return;
 46     if(l <= tl && tr <= r){
 47         G[x].push_back(p);
 48         return;
 49     }
 50     int mid = (tl + tr) >> 1;
 51     query(nod[p].ls, tl, mid, l, r, x);
 52     query(nod[p].rs, mid + 1, tr, l, r, x);
 53     return;
 54 }
 55
 56 // Tarjan
 57 stack<int> S;
 58 int dfs_clock, dfn[maxn * 35], low[maxn * 35];
 59 int bcc_cnt, bccno[maxn * 35];
 60 void dfs(int u)
 61 {
 62     dfn[u] = low[u] = ++dfs_clock;
 63     S.push(u);
 64     for(int i = 0; i < G[u].size(); i++)
 65     {
 66         int v = G[u][i];
 67         if(!dfn[v])
 68         {
 69             dfs(v);
 70             low[u] = min(low[u], low[v]);
 71         }
 72         else if(!bccno[v]) low[u] = min(low[u], dfn[v]);
 73     }
 74
 75     if(low[u] == dfn[u])
 76     {
 77         bcc_cnt++;
 78         while(1)
 79         {
 80             int x = S.top(); S.pop();
 81             bccno[x] = bcc_cnt;
 82             if(x == u) break;
 83         }
 84     }
 85 }
 86
 87 void find_bcc(int n)
 88 {
 89     memset(dfn, 0, sizeof(dfn));
 90     memset(bccno, 0, sizeof(bccno));
 91     dfs_clock = bcc_cnt = 0;
 92     for(int i = 1; i <= n; i++) if(!dfn[i]) dfs(i);
 93 }
 94
 95 int main(){
 96     int N, M, rt = 1;
 97     scanf("%d", &N);
 98     for(int i = 1; i <= N; ++i) scanf("%d", a + i);
 99     build(1, 1, N);
100     scanf("%d", &M);
101     while(M--){
102         int op, x, y, l, r;
103         scanf("%d %d", &op, &x);
104         if(op == 0){
105             scanf("%d", &y);
106             update(1, N, rt, rt, x, y);
107         }
108         else{
109             scanf("%d %d", &l, &r);
110             query(rt, 1, N, l, r, id[x]);
111         }
112     }
113     assert(cnt < maxn * 35);
114     find_bcc(cnt);
115     for(int i = 1; i <= cnt; ++i){
116         f[bccno[i]] += nod[i].tag;
117         for(int j = 0; j < G[i].size(); ++j){
118             int to = G[i][j];
119             if(bccno[to] != bccno[i]) f[bccno[i]] = 1e18;
120         }
121     }
122     LL ans = 1e18;
123     for(int i = 1; i <= bcc_cnt; ++i){
124         ans = min(ans, f[i]);
125     }
126     printf("%lld\n", ans);
127     return 0;
128 }

Aguin

原文地址:https://www.cnblogs.com/Aguin/p/9029943.html

时间: 2024-10-03 17:08:47

2018 计蒜之道 初赛 第一场的相关文章

2017 计蒜之道 初赛 第一场 B.阿里天池的新任务

2017 计蒜之道 初赛 第一场 B.阿里天池的新任务 1 /* QYP kuai wo dai ma*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<iomanip> 5 #include<cstring> 6 #include<cstdlib> 7 #include<cstdio> 8 #include<queue> 9 #include<ctime

计蒜之道 初赛第一场B 阿里天池的新任务(简单)

阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displaystyle w_{i} = \begin{cases}b, & i = 0\\(w_{i-1} + a) \mod n, & i > 0\end{cases}w?i??={?b,?(w?i−1??+a)modn,???i=0?i>0?? 接下来,定义长度为 nn 的 DNA 碱

2017 计蒜之道 初赛 第一场 A、B题

A题 阿里的新游戏 题目概述: 阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子.我们可以用坐标系来描述棋盘: 如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三.现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的.请你帮小红计算他成三的线段数. 样例对应的棋盘如下: 输入格式 输入第一行两个整数 n,m(3 \le n, m \le

计蒜之道 初赛 第一场 题解

搜狗输入法的分词算法 搜狗输入法最近的用户输入中出现了一种新的输入模式,形如 "0k1234567",搜狗的工程师发现这一模式后了解到,这是一种新被提出的对于十五进制数字的标记模式,其中 "0k" 是标记进制为15的前缀标记,之后的部分 "1234567" 是实际的十五进制的数字串. 在发现这一标记模式后,搜狗的工程师开始尝试在已有的分词算法上进一步加入对于十五进制数字串的处理,把网页上的这种形式的 15 进制数正确地提取出来.我们知道,标记十五

2018 计蒜之道 初赛 第二场

签到完看到C没什么人过就溜乐. A.淘宝的推荐系统 直接DP,时间复杂度$O(∑nd)$ #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) #define dec(i, a, b) for (int i(a); i >= (b); --i) #define MP make_pair #define fi first #define se s

2017计蒜之道 初赛 第二场 百度的科学计算器(简单)

/** 题目:2017计蒜之道 初赛 第二场 百度的科学计算器(简单) 链接:https://nanti.jisuanke.com/t/15504 题意:给一个合法的表达式,包含加号+.减号-.括号().数字常量,表达式中没有空格. 输入数据保证数字常量以及计算过程中数值绝对值均不超过 10^12??,对于浮点型数值常量,保证小数点后不超过 666 位. 思路:暴力模拟:python有函数可以直接调用. 坑点:如果表达式中出现过浮点数,那么输出结果保留6位小数, 否则输出整数,不出现小数. */

2018 计蒜之道 初赛 第三场

A. 贝壳找房性价比 题解:按s排序后,斜率最大的点必定在相邻的两点之间. #pragma warning(disable:4996) #include<queue> #include<map> #include<string> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #de

2018 计蒜之道 初赛 第五场

这次的比赛没有现场打,而是等到了今天才来补. 主要是因为那时候和HHHOJ上的比赛冲突了,所以就没写. 这次前三题的难度都比较低,但是就是一个T4要莫比乌斯反演.又是不可食用的. 好了我们开始看题. A. 贝壳找房搬家 这道题刚开始看的时候没看懂题意,觉得T1就是这种立体几何的题目,有种想死的感觉. 因为我认为这个方块可以不规则地想怎么放就怎么放的,其实题目中有一句话: 我们可以把这堆箱子看成一个\(x \times y \times z\) 的长方体. 什么?刚开始只能是长方体吗?好吧好像还是

计蒜之道 初赛 第二场 题解

人人都有极客精神 人人公司是一家极为鼓励极客精神的公司,当有重要的项目需要上线但又时间太紧,甚至需要当天上线的时候,往往会挂起海盗旗开启电子日期显示,让大家可以在对时间有更明确的感知的情况下,同心协力搞定重要的项目.海盗旗下方的电子屏显示的日期形式为 YYYYMMDD (年份占 4 位.月份占 2 位.天数占 2 位). 日期电子屏幕上每个数字对应的显示如下图: <img src="http://res.jisuanke.com/img/nanti/428.png" <=&