打卡信奥刷题(641)用C++信奥P8267[普及组/提高] [USACO22OPEN] Counting Liars B

[USACO22OPEN] Counting Liars B

题目描述

奶牛 Bessie 躲在数轴上的某处。Farmer John 的 N N N 头奶牛( 1 ≤ N ≤ 1000 1\le N\le 1000 1N1000)中的每头奶牛都有一条信息要分享:第 i i i 头奶牛说 Bessie 躲在小于或等于 p i p_i pi 的某个位置,或者说 Bessie 躲在大于或等于 p i p_i pi 的某个位置( 0 ≤ p i ≤ 1 0 9 0\le p_i\le 10^9 0pi109)。

不幸的是,可能不存在躲藏位置与所有奶牛的回答均一致,这意味着并非所有奶牛都在说真话。计算在撒谎的奶牛的最小数量。

输入格式

输入的第一行包含 N N N

以下 N N N 行每行包含字符 L 或 G,之后是一个整数 p i p_i pi。L 表示第 i i i 头奶牛说 Bessie 的躲藏位置小于或等于 p i p_i pi,而 G 表示第 i i i 头奶牛说 Bessie 的躲藏位置大于或等于 p i p_i pi

输出格式

输出在撒谎的奶牛的最小数量。

样例 #1

样例输入 #1

2
G 3
L 5

样例输出 #1

0

样例 #2

样例输入 #2

2
G 3
L 2

样例输出 #2

1

提示

【样例解释 1】

有可能没有奶牛在撒谎。

【样例解释 2】

至少一头奶牛在撒谎。

C++实现

#include
using namespace std;
#define N 1005
int n,t,x,y,a[N],b[N],ans;
char c;
int main()
{
scanf(“%d”,&n);
b[++y]=-1;
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);
a[++x]=1e9+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;
}

打卡信奥刷题(641)用C++信奥P8267[普及组/提高] [USACO22OPEN] Counting Liars B_第1张图片

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

你可能感兴趣的:(C++,c++,开发语言,算法,青少年编程,数据结构)