洛谷P8267题解
本文同步更新于洛谷博客
前置知识
- 若 ,则
- 若 ,则
- 若 ,则 无解
题解
首先,我们将字符为 L
和 G
分别加入数组 和 中,并进行排序。然后我们 枚举,不妨假设枚举到 和 ,数组 的大小分别为 。
由前置知识,我们可以得到:
- 都是满足条件的
- 都是满足条件的
- 如果 则无解。
因此,我们先判断一下 和 的大小关系,如果符合条件,,这样就得出答案了。
优化
其实这道题是可以 的。注意到枚举每一个 时, 是固定的,我们要让 尽量小,就是让 尽量大。简单来说,就是要求 数组中小于等于 的最大值,在 数组中二分即可。为了防止某些居心叵测的人,下面的代码还是 的。
注意
- 最坏情况下有 只奶牛猜的是对的,所以 要初始化为 。
Code
#include<bits/stdc++.h>
using namespace std;
#define N 1005
int n,t,x,y,a[N],b[N],ans;
char c;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("\n%c%d",&c,&t);
if(c=='L') a[++x]=t;
else b[++y]=t;
}
sort(a+1,a+x+1);
sort(b+1,b+y+1);
ans=n-1;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
if(a[i]>=b[j]) ans=min(ans,i-1+y-j);
else break;
}
}
printf("%d\n",ans);
return 0;
}
本文作者:Ginger_he
本文链接:https://www.cnblogs.com/Gingerhe/p/16097525.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步