第二题这样的,刚开始看错题目了耽误了好多时间!/(ㄒ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

相关推荐

12-13 14:51
已编辑
井冈山大学 算法工程师
龙虾x:算法比你强的没有你美,比你美的…..算了已经没有比你美的了
工作两年想退休了
点赞 评论 收藏
分享
12-11 14:24
门头沟学院 Java
牛客35720396...:不要用boss,全是骗
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务