第二题这样的,刚开始看错题目了耽误了好多时间!/(ㄒoㄒ)/~~ #include<iostream> #include<stdio.h> #include<string> #include<map> using namespace std; map<string, int>pp; int n,m; void work (string s) { bool p=0; int now; if (s[0]=='a') return ; for (int i=5;i<s.size();i++) if (s[i]=='/') { p=1; now=i; break; } string ss[5]; string temp=""; int count=1; int last; if (!p) { for (int i=5;i<s.size();i++) { if (s[i]!='.') temp+=s[i]; if (s[i]=='.') { ss[count]=temp; temp=""; count++; last=i; } } ss[4]=""; for (int i=last+1;i<s.size();i++) ss[4]+=s[i]; } else { for (int i=5;i<s.size();i++) { if (s[i]!='.') temp+=s[i]; if (s[i]=='.') { ss[count]=temp; temp=""; count++; last=i; } } ss[4]=""; for (int i=last+1;i<now;i++) ss[4]+=s[i]; } /*cout<<s<<endl; cout<<ss[1]<<" "; cout<<ss[2]<<" "; cout<<ss[3]<<" "; cout<<ss[4]<<" "<<endl;*/ int a[9],sz,x; sz=0; x=0; for (int i=0;i<ss[1].size();i++) x=x*10+(ss[1][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); sz=0; x=0; for (int i=0;i<ss[2].size();i++) x=x*10+(ss[2][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); sz=0; x=0; for (int i=0;i<ss[3].size();i++) x=x*10+(ss[3][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); sz=0; x=0; for (int i=0;i<ss[4].size();i++) x=x*10+(ss[4][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); //cout<<temp<<endl; //cout<<temp.size()<<endl; string ans=""; for (int i=ss[4].size();i<temp.size();i++) ans+=temp[i]; //cout<<ans<<endl; //a[ans]=0; string t=""; for (int i=0;i<=19;i++) t+=ans[i]; pp[t]=1; //cout<<ans<<endl; //cout<<t<<endl; } void calc (string s) { bool p=0; int now; if (s[0]=='a') return ; for (int i=0;i<s.size();i++) if (s[i]=='/') { p=1; now=i; break; } string ss[5]; string temp=""; int count=1; int last; if (!p) { for (int i=0;i<s.size();i++) { if (s[i]!='.') temp+=s[i]; if (s[i]=='.') { ss[count]=temp; temp=""; count++; last=i; } } ss[4]=""; for (int i=last+1;i<s.size();i++) ss[4]+=s[i]; } else { for (int i=0;i<s.size();i++) { if (s[i]!='.') temp+=s[i]; if (s[i]=='.') { ss[count]=temp; temp=""; count++; last=i; } } ss[4]=""; for (int i=last+1;i<now;i++) ss[4]+=s[i]; } /*cout<<s<<endl; cout<<ss[1]<<" "; cout<<ss[2]<<" "; cout<<ss[3]<<" "; cout<<ss[4]<<" "<<endl;*/ int a[9],sz,x; sz=0; x=0; for (int i=0;i<ss[1].size();i++) x=x*10+(ss[1][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); sz=0; x=0; for (int i=0;i<ss[2].size();i++) x=x*10+(ss[2][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); sz=0; x=0; for (int i=0;i<ss[3].size();i++) x=x*10+(ss[3][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); sz=0; x=0; for (int i=0;i<ss[4].size();i++) x=x*10+(ss[4][i]-'0'); while (x) { a[++sz]=x%2; x=x/2; } if (sz<8) { for (int i=1;i<=8-sz;i++) temp+="0"; } for (int i=sz;i>=1;i--) temp+=char(a[i]+'0'); //cout<<temp<<endl; //cout<<temp.size()<<endl; string ans=""; for (int i=ss[4].size();i<temp.size();i++) ans+=temp[i]; //cout<<ans<<endl; //a[ans]=0; string t=""; for (int i=0;i<=19;i++) t+=ans[i]; //cout<<t<<endl; if (pp[t]) cout<<"NO"<<endl; else cout<<"YES"<<endl; } void doing () { cin>>n>>m; getchar(); string s; for (int i=1;i<=n;i++) { getline (cin,s); work (s); } //cout<<"!!!!!"<<pp["00000001000000010000"]; for (int i=1;i<=m;i++) { cin>>s; calc (s); } } int main () { doing (); return 0; }
点赞 5

相关推荐

牛客网
牛客企业服务