题目大意:这个题意和比赛时的题意不太一样,但是读完其实都差不多,都是求‘a’的个数。给你n个数,1<=每个数<=2^32-1,每个数都表示成32位的二进制,每8位代表1个字符。
解题思路:将每个数表示成32位,比如1684234849,可以用二进制表示成01100100(d) 01100011© 01100010(b) 01100001(a),那么对于每个数我们只要判断每8位是否等于97就行了,可以使用位运算,将每个数向右移动8位,比如x,temp=x;x>>=8;x<<=8;temp-x就为它剩余的8位。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int get(ll x)
{
int ans=0;
while(x){
ll temp=x;
x>>=8;
x<<=8;
if(temp-x==97)ans++;
x>>=8;
}
return ans;
}
int main()
{
int n;
while(~scanf("%d",&n)){
ll x;
int ans=0;
for(int i=1;i<=n;i++){
scanf("%lld",&x);
ans+=get(x);
}
printf("%d\n",ans);
}
return 0;
}