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;
}
©著作权归作者所有

发表评论

正在加载 Emoji