虽然题目停水的,但是好像字符处理运用的还比较合适
- #include <iostream>
- #include <string>
- #include <cstdio>
- #include <map>
- using namespace std;
- string Getstr(string str){///规格化字符串(添加0)
- string temp,getstr="";
- int itl=0,itf=str.find(".");
- for(int i=0; i<3; i++){
- temp = str.substr(itl,itf-itl);
- temp.insert(0,3-temp.length(),'0');
- getstr+=temp;
- itl=itf+1,itf=str.find(".",itf+1);
- }
- temp = str.substr(itl,str.length()-itl);
- temp.insert(0,'0');
- getstr+=temp;
- return getstr;
- }
- int main (){
- int t,xx=0;
- cin>>t;
- while(t--){
- int m,n,coun=0;
- cin>>m>>n;
- string str,tab[1005];
- for(int i=0; i<m; i++){
- cin>>str;
- tab[coun++]=Getstr(str);
- }
- printf("Case #%d:\n",++xx);
- for(int i=0; i<n; i++){
- cin>>str;
- string temp = Getstr(str);
- map<long long,int > m;
- for(int j=0; j<coun; j++){
- long long sum=0;
- for(int i=0; i<4; i++){
- int aa=(tab[j][i*3]-'0')*100+(tab[j][i*3+1]-'0')*10+tab[j][i*3+2]-'0',bb=(temp[i*3]-'0')*100+(temp[i*3+1]-'0')*10+temp[i*3+2]-'0';
- sum=sum*1000+(aa&bb);
- }
- m[sum]=0;
- }
- cout<<m.size()<<endl;
- }
- }
- return 0;
- }