谋财害命之星热身赛1003IP聚合


这道题使用位运算优化程序。


#include <iostream>
#include <cstdio>
using namespace std;

struct web
{
     int s[4];
};

web IP[1000];
web scr[50];
web wweb[1000];
int main()
{
     int t,n,m;
     int flag;
     scanf("%d",&t);
     for(int tt=1;tt<=t;++tt)
     {
          flag=0;
          scanf("%d %d",&n,&m);
          for(int i=0;i<n;++i)
          {
               scanf("%d.%d.%d.%d",&IP[i].s[0],&IP[i].s[1],&IP[i].s[2],&IP[i].s[3]);
          }
          printf("Case #%d:\n",tt);
          for(int i=0;i<m;++i)
          {
               scanf("%d.%d.%d.%d",&scr[i].s[0],&scr[i].s[1],&scr[i].s[2],&scr[i].s[3]);
               flag=0;
               for(int j=0;j<n;++j)
               {
                    web x;
                    bool FLAG=true;
                    x.s[0]=IP[j].s[0]&scr[i].s[0];
                    x.s[1]=IP[j].s[1]&scr[i].s[1];
                    x.s[2]=IP[j].s[2]&scr[i].s[2];
                    x.s[3]=IP[j].s[3]&scr[i].s[3];
                    for(int k=0;k<flag;++k)
                    if(x.s[0]==wweb[k].s[0]&&x.s[1]==wweb[k].s[1]&&x.s[2]==wweb[k].s[2]&&x.s[3]==wweb[k].s[3]) {FLAG=false;break;}
                    if(FLAG) {wweb[flag]=x;flag++;}
               }
               printf("%d\n",flag);
          }

     }
    return 0;
}


你可能感兴趣的:(谋财害命之星热身赛1003IP聚合)