1903 GG【河蟹】F【河蟹】W

来源:互联网 发布:淘宝一分钱评价违规吗 编辑:程序博客网 时间:2024/04/29 01:46
描述
编者按:本文所有”【】“及其所包括的内容,为响应【最大公约数】的和谐社会宗旨而设,完全可以忽略,对读题带来的可能不便,深表歉意~


话说明天就是【二的六次方】日,G【】F【】W(不知道的可以忽略)又要开始大动作了……

突然,只听GG大吼一声:“MD!老子的网站又被墙了!”,周围的人顿时无语,话说GG的网站很少涉及政【】治等话题,难道是……(乱想的去面壁!)

突然too,GG郑重宣布:“我要在我的网站上试验本人最新研究的信息传输方式!“

以下内容转自GG某国际会议上的论文:

“G【】F【】W通常只是通过信息的抓取判断内容是否hexie,一旦使用一套全新的编码即可完全消除‘’的困扰。现行网络通常采用的是Base64,它是把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节。我们可以换一种简单而有效的方式,把每个8Bit的字节转换成4个2Bit的字节,然后以4个字符来代替。编码和字符的对应方案如下:

00---G

01---F

10---W

11---空格

这样编码后的字符串就只会含有‘G’,‘F’,‘W’和空格。

例如字符y ,其ASCII码是121,对应的二进制串是01111001,这样分成 01 11 10 01四块后,用Base4编码后的字符串为‘F WF’。”

现在,我们会给定任一字符串,要求按照GG的最新研究成果所得到的结果中,有多少个“G【】F【】W”。


输入
第一行有一个正整数n,代表接下来有n个待编码的原串。(n <= 20)

接下来有n行,每行有一个长度不超过10^5的原串,原串中的字符可能为ASCII码中除换行符以外的任意可见字符。


输出

共有n行,每行为一个整数k, 表示对应每组输入数据的编码中含有多少个完整的“G【】F【】W”。

解题思路:此题需用把英文字母转换为ASCII码,然后按照base编码方式进行转换,最后统计G F W的个数。具体操作起来可以通过位运算直接转换为0,1,2这些数字,用数组存储,直接查找即可。


#include<iostream>#include<cstdio>using namespace std;char d[400000];char s[100001];int main(){int t;scanf("%d",&t);while(t--){scanf("%s",s);int n=0;for(int i=0;s[i];i++){char c = s[i];d[n++] = c>>6;d[n++] = (c>>4)&3;d[n++] = (c>>2)&3;d[n++] = c&3;}int ans = 0;for(int i=0;i<n-2;i++)if (d[i]==0&&d[i+1]==1&&d[i+2]==2) ++ans;cout<<ans<<endl;}return 0;}


原创粉丝点击