Problem 1003 求1003出错原因

124173440 | 2015-05-24 20:55:12Author
#include<stdio.h> #include<algorithm> using namespace std; struct node { int A,B,C,D; bool operator<(const node &t) const { if(A<t.A) return true; else if(A==t.A) { if(B<t.B) return true; else if(B==t.B) { if(C<t.C) return true; else if(C==t.C) { if(D<t.D) return true; else return false; } else return false; } else return false; } else return false; } }Ip[1010],Ip2[60]; int main() { int T,n,m,i,k=1,j,count,tag1,tag2; int a,b,c,d; int prea,preb,prec,pred; scanf("%d",&T); while(T--) { tag1=0; tag2=0; scanf("%d %d",&n,&m); for(i=0;i<n;i++) { scanf("%d.%d.%d.%d",&a,&b,&c,&d); if(a>255||a<0||b>255||b<0||c>255||c<0||d>255||d<0) continue; Ip[tag1].A=a; Ip[tag1].B=b; Ip[tag1].C=c; Ip[tag1].D=d; tag1++; } for(i=0;i<m;i++) { scanf("%d.%d.%d.%d",&a,&b,&c,&d); if(a>255||a<0||b>255||b<0||c>255||c<0||d>255||d<0) continue; Ip2[tag2].A=a; Ip2[tag2].B=b; Ip2[tag2].C=c; Ip2[tag2].D=d; tag2++; } sort(Ip,Ip+tag1); /*for(i=0;i<n;i++) { printf("%d %d %d %d\n",Ip[i].A,Ip[i].B,Ip[i].C,Ip[i].D); }*/ printf("Case #%d:\n",k++); for(i=0;i<tag2;i++) { j=0; count=1; prea=Ip2[i].A&Ip[j].A; preb=Ip2[i].B&Ip[j].B; prec=Ip2[i].C&Ip[j].C; pred=Ip2[i].D&Ip[j].D; for(j=1;j<tag1;j++) { a=Ip2[i].A&Ip[j].A; b=Ip2[i].B&Ip[j].B; c=Ip2[i].C&Ip[j].C; d=Ip2[i].D&Ip[j].D; if(a!=prea||b!=preb||c!=prec||d!=pred) { count++; prea=a; preb=b; prec=c; pred=d; } } printf("%d\n",count); } } return 0; }
LiLiuqi | 2015-05-24 21:50:20# 1
不要贴代码,,可以简要说思路~
qianshanhan | 2015-05-24 22:30:58# 2
我的也一直出错,在本地自己测了很多用例都通过了。求楼主给出一些特例
124173440 | 2015-05-24 22:58:30# 3
好像可以输入不完整的IP ,要把它变成规格化的 比如 192. 需要变成 192.0.0.0
sxiszero | 2015-05-25 07:44:40# 4
三楼说的好像不对。我用scanf("%d.%d.%d.%d")读入没出错,说明应该不会有不完整ip吧
sxiszero | 2015-05-25 07:45:49# 5
楼主判重用的sort后,然后扫一遍?我开始这样也是WA的。判重可以用set。
qianshanhan | 2015-05-25 08:35:16# 6
sort在本地测的没问题啊,而且题目给的例子也通过
Jidong | 2015-05-25 13:22:54# 7
1003
去重的方式错了。 给你一个例子: 3 1 1.1.1.1 2.2.2.2 3.3.3.3 1.1.1.1 答案应该是2吧。