首页 > 其他分享 >CF1824A LuoTianYi and the Show

CF1824A LuoTianYi and the Show

时间:2023-05-09 19:24:51浏览次数:46  
标签:std 三类 CF1824A Show int max LuoTianYi ++ 座位

题意

有 \(n\) 个人、编号为 \(1\) 至 \(m\) 的 \(m\) 个座位与三种坐座位的方式:

  1. 坐在最左边的人的左边,当 \(1\) 号座位也不为空时就不坐了,当没有人坐在座位上时坐在 \(m\) 号座位上;
  2. 坐在最右边的人的右边,当 \(m\) 号座位也不为空时就不坐了,当没有人坐在座位上时坐在 \(1\) 号座位上;
  3. 坐在指定编号的座位上,当已经有人坐在这个座位上时就不坐了。

每个人都有一种坐座位的方式,你可以任意指定他们坐座位的顺序,问最多能坐多少个人。

\(n,m \le 2 \times 10^5\)。

思路

为了方便,我们将上边三种坐进去的方式所对应的三种人称为一类人、二类人与三类人。

首先我们先把三类人排个序去个重,这样至少每个三类人都有座位坐,于是我们先把他们安排进去再说。

然后对于一类人与二类人,可以任意指定一个三类人作为锚节点,在保证其他三类人也坐得进去的前提下尽量多的向其左右插入一类人与二类人。可以保证一定存在这样一种插入方式。于是我们可以 \(O(n)\) 预处理出每个三类人左右的空位,然后再扫一遍取得最大值。

还有一种情况就是,仍然在保证所有三类人都坐的进去的前提下,只安排一类人或二类人其中一种人的座位,这个可以特判一下。

代码

int n, m;
std::cin >> n >> m;

std::vector<int> x(n), a;
int lcnt = 0, rcnt = 0;
for (int i = 0; i < n; i++) {
  std::cin >> x[i];
  if (x[i] > 0) {
    a.push_back(x[i]);
  } else if (x[i] == -1) {
    lcnt++;
  } else if (x[i] == -2) {
    rcnt++;
  }
}

if (a.empty()) {
  std::cout << std::min(m, std::max(lcnt, rcnt)) << "\n";
  return;
}

std::sort(a.begin(), a.end());
a.erase(std::unique(a.begin(), a.end()), a.end());
n = a.size();

std::vector<int> l(n), r(n);
int max = std::min(m - n, std::max(lcnt, rcnt));
for (int i = 0; i < n; i++) {
  l[i] = a[i] - i - 1;
  r[i] = m - a[i] - (n - i - 1);
  max = std::max(max, std::min(lcnt, l[i]) + std::min(rcnt, r[i]));
}

int ans = n + max;
std::cout << ans << "\n";

标签:std,三类,CF1824A,Show,int,max,LuoTianYi,++,座位
From: https://www.cnblogs.com/forgot-dream/p/17385994.html

相关文章

  • CF1824B2 LuoTianyi and the Floating Islands (Hard Version) - 概率期望 - 树的重心
    题目链接:https://codeforces.com/contest/1824/problem/B2题解:考虑一棵\(n\)个点的树,假如已经选定了\(k\)个特殊点,如何判断某一个点是否为好点?显然将这个点提到根没有影响,那么好点的充要条件是对于所有子树的\(S_u\)值都\(\leqk/2\),这里\(S\)代表\(u\)子树中的特殊......
  • CF1825C LuoTianyi and the Show
    传送门(luogu)传送门(CF)前言我来水题解力简化题意$n$个人,$m$个座位,每个人落座的方法有三种:坐最左边的人的左边,没人的话就做$m$号座位,若最左边的为$1$号,就离开;坐最右边的人的右边,没人的话就做$1$号座位,若最右边的为$m$号,就离开;坐在$x_i$号座位上,有人就......
  • 面试 v-if 和 v-show的区别
    v-if vs. v-show​v-if 是“真实的”按条件渲染,因为它确保了在切换时,条件区块内的事件监听器和子组件都会被销毁与重建。v-if 也是惰性的:如果在初次渲染时条件值为false,则不会做任何事。条件区块只有当条件首次变为true时才被渲染。相比之下,v-show 简单许多,元素无论初......
  • 《CTFshow-Web入门》08. Web 71~80
    目录web71知识点题解web72知识点题解web73题解web74题解web75知识点题解web76题解web77知识点题解web78知识点题解web79题解web80知识点题解ctf-web入门web71知识点ob_get_contents():得到输出缓冲区的内容。ob_end_clean():清除缓冲区的内容,并将缓冲区关闭,但不会输出内......
  • 批量更改showdoc的图片的URL
    下载SQLiteSpy:http://xz.w10a.com/Small/SQLiteSpyzwb.rar用它打开:\showdoc\Sqlite\showdoc.db.php参考下图定位至“1”处;键入以下命令(红字为原始内容,绿字为替换后的内容)按F9。updatepagesetpage_content=replace(page_content,"192.168.0.111","192.168.X.201")......
  • 《CTFshow-Web入门》07. Web 61~70
    目录web61~65题解web66知识点题解web67知识点题解web68知识点题解web69知识点题解web70知识点题解ctf-web入门web61~65题解这几个题都和web58一样。可能内部禁用的函数不一样吧。但payload都差不多。不多解释了。以下解法随便挑一个即可。可能不同题会有部分函数被......
  • 索引-性能分析-show profiles
    Sql性能分析:profiles详情:showprofiles能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过hava——profiles参数,能够看到当前Mysql是否支持profiles操作执行一系列的业务SQL业务,然后通过如下指令查看指令的执行耗时:#查看每一条SQL的基本耗时情况:showprofiles;#......
  • 在使用showModalDialog中为解决刷新时弹出新窗口时用到iframe所带来的一个问题
    问题描述:我们在开发过程中使用showModalDialog来产生一个弹出窗口,而在这个弹出窗口中要做一个刷新,或者是切换到其它的url时会弹出新窗口。为了解决这个问题,网上有个办法是采用iframe,在showModalDialog窗口中使用iframe这样就不会有弹出窗口了,但这样使用又带来了一个小的问题,我们页......
  • Provisional heads are shown、NullPointerException空指针异常?堆栈与队列的区别?Java
    Provisionalheadsareshown排查是否插件拦截,我的以前没有这种,所以排除本地网络节点问题,连接不到图片服务器,以下是解决方法:1.进入到C盘Windows文件夹System32/drivers/etc目录下,打开hosts文件,绑定下2.改下本地dns为公共dns网络节点导致的问题,一般为运营商导致,产生问题的原因为......
  • ctfshow-菜狗杯-wp
    MISCmisc1下载附件解压misc2下载附件解压发现解压不了用010打开发现是png图片后缀改为png文字识别一下就好了CRYPTO签到密码16进制转字符串caesar根据题目发现是凯撒直接离线工具一把梭可以发现在3时出现flag加上头部提交即可0x36d16进制的密码转为10进制......