学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:USACO备考冲刺必刷题 | 汇总-优快云博客
【题目描述】
奶牛 Bessie 躲在数轴上的某处。Farmer John 的 N 头奶牛(1≤N≤1000)中的每头奶牛都有一条信息要分享:第 i 头奶牛说 Bessie 躲在小于或等于 pi 的某个位置,或者说 Bessie 躲在大于或等于 pi 的某个位置(0≤pi≤10^9)。
不幸的是,可能不存在躲藏位置与所有奶牛的回答均一致,这意味着并非所有奶牛都在说真话。计算在撒谎的奶牛的最小数量。
【输入】
输入的第一行包含 N。
以下 N 行每行包含字符 L 或 G,之后是一个整数 pi。L 表示第 i 头奶牛说 Bessie 的躲藏位置小于或等于 pi,而 G 表示第 i 头奶牛说 Bessie 的躲藏位置大于或等于 pi。
【输出】
输出在撒谎的奶牛的最小数量。
【输入样例】
2
G 3
L 5
【输出样例】
0
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, minn=1e9;
struct node {
char c;
int pos;
}p[1005];
bool cmp(node a, node b)
{
return a.pos < b.pos;
}
int main()
{
cin >> n;
for (int i=1; i<=n; i++) {
cin >> p[i].c >> p[i].pos;
}
sort(p+1, p+n+1, cmp);
for (int i=1; i<=n; i++) {
int tmp = p[i].pos;
int cnt = 0;
for (int j=1; j<=n; j++) {
if (p[j].c=='G') {
if (tmp<p[j].pos) cnt++;
} else if (p[j].c=='L') {
if (tmp>p[j].pos) cnt++;
}
}
minn = min(minn, cnt);
}
cout << minn << endl;
return 0;
}
【运行结果】
G 3
L 5
0