C 爵士
题目描述 Sabit 爵士是一名高贵的贵族,看遍了人世繁华,他变得热爱异世界文化。他喜欢在 QQ 群里和他的小伙伴们聊点二次元文化。可经常他们的话有些偏离二次元,这让 Sabit 很苦恼。我们认为,假如一句话里含有 2 ,那么这句话很二次元。同时,群里的二次元浓度由二次元话的数量的占比决定。现在爵士 Sabit 给你看了一眼群里的聊天记录,希望可以知道群里的二次元浓度是多少。
输入描述 第一行输入一个整数 T (1≤T≤100),表示数据的组数。对于每组数据:第一行输入一个整数 n (1≤n≤200),表示聊天记录的条数。接下来 n 行每一行输入一个长度不超过 100 的字符串。保证不包含大写字母、小写字母、数字和空格以外的字符,并且没有连续的空格,行末不含空格。
输出描述 对于每组数据,在一行中输出一个数字表示群里的二次元浓度。如果你的答案的相对或绝对误差小于 10−4,那么它会被认为是正确的。
思路
签到题,统计有多少个含有“2”的字符串再按照题意输出比例就行了。不过当时数据出锅了,我用cin.getline()和scanf("%[^\n]")都没过,用string+getline才勉强过题。后来数据修复了又rejudge,前面的submit倒是也过了。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
template<class _T>inline void read(_T &_a)
{
bool f=0; char _c=getchar(); _a=0;
while(_c<'0'||_c>'9'){ if(_c=='-') f=1; _c=getchar(); }
while(_c>='0'&&_c<='9'){ _a=(_a<<3)+(_a<<1)-'0'+_c; _c=getchar(); }
if(f) _a=-_a;
}
const int MAXN=105;
int n,T,ans;
string str;
int main()
{
for(read(T);T;--T)
{
read(n);
ans=0;
for (int j=1;j<=n;++j)
{
getline(cin,str);
for (int i=str.length()-1;i>=0;--i)
if(str[i]=='2')
{
++ans;
break;
}
}
printf("%lf\n",double(ans)/double(n));
}
return 0;
}