[COCI2006-2007#6] PRASE
题目描述
孩子们正在餐桌旁吃午餐,共有 n n n 份食物,孩子们会按照从 1 1 1 至 n n n 的顺序依次取走这 n n n 份食物。
当某个孩子取走了一份食物时,如果这个他之前已经取走的食物份数(不包括当前这一份)比其他人取走的食物份数之和还要多,那么他的妈妈就会提醒他注意自己不礼貌的行为。注意,虽然被妈妈提醒了,但是他仍然会取走这份食物。换句话说,妈妈的提醒对孩子的行为没有任何影响。
给定 n n n 份食物分别被哪个孩子取走了,请求出妈妈们一共提醒了多少次。
输入格式
第一行是一个整数,代表食物的份数 n n n。
第 2 2 2 到第 ( n + 1 ) (n + 1) (n+1) 行,每行一个字符串,第 ( i + 1 ) (i + 1) (i+1) 行的字符串 s i s_i si 表示取走第 i i i 份食物的孩子的名字。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
4
mirko
stanko
stanko
stanko
样例输出 #1
1
样例 #2
样例输入 #2
17
a
b
b
a
a
a
c
a
b
b
c
b
b
b
b
b
b
样例输出 #2
4
提示说明
样例 1 解释
当取到第 3 3 3 份食物时,stanko 已取走的食物(不包括当前这份)的份数是一份,而其他人也总共取走了一份,所以 stanko 的妈妈不会提醒他注意礼貌。
当取到第 4 4 4 份食物时,stanko 已经取走两份食物,其他人总共取走了一份食物,因此妈妈会提醒他。
数据规模与约定
对于全部的测试点,保证:
- 1 ≤ n ≤ 100 1 \leq n \leq 100 1≤n≤100
- 1 ≤ ∣ s i ∣ ≤ 20 1 \leq |s_i| \leq 20 1≤∣si∣≤20, s i s_i si 中只含小写英文字母。 ∣ s i ∣ |s_i| ∣si∣ 表示字符串 s i s_i si 的长度。
说明
题目译自 COCI2006-2007 CONTEST #6 T1 PRASE。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e2+10;
string s[N];
int main()
{
ll n;
cin>>n;
ll ans=0;
for(ll i=1;i<=n;i++)
{
cin>>s[i];
ll num=0;
for(ll j=1;j<i;j++)
{
if(s[i]==s[j])
num++; //统计个数
}
//注意,一定要-1(num计算的是前面的)
if(i-num-1<num) ans++;
}
cout<<ans<<endl;
return 0;
}