• hdu4760Good Firewall


    4760

    数组模拟就可以了 读的时候可以整数读入

      1 #include <iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<stdlib.h>
      6 #include<queue>
      7 #include<cmath>
      8 #include<vector>
      9 using namespace std;
     10 #define LL __int64
     11 int len,maxz;
     12 LL ip[1050][16][2],pp[40];
     13 int vis[1050],w[1024],di[50],g;
     14 char s[50],s1[50],s2[50];
     15 void init()
     16 {
     17     int i;
     18     pp[0] = 1;
     19     for(i = 1; i < 32 ; i++)
     20     pp[i] = pp[i-1]*2;
     21 }
     22 void change(int a)
     23 {
     24     int x[10],o=0,i;
     25     while(a)
     26     {
     27         x[++o] = a%2;
     28         a/=2;
     29     }
     30     for(i = 1; i <= 8-o ; i++)
     31     di[++g] = 0;
     32     for(i = o ; i>= 1; i--)
     33     di[++g] = x[i];
     34 }
     35 LL swit(int k,int e)
     36 {
     37     int i;
     38     LL sum=0;
     39     if(k==1)
     40     for(i = 1 ; i <= g ; i++)
     41     sum+=di[i]*pp[32-i];
     42     else
     43     {
     44         for(i = 1; i <= e ; i++)
     45         sum+=di[i]*pp[32-i];
     46         for(i = e+1 ; i <= 32 ; i++)
     47         sum+=pp[32-i];
     48     }
     49     return sum;
     50 }
     51 int main()
     52 {
     53     int m,n,i,j;init();
     54     int a,b,c,d,e;
     55     char cc;
     56     while(scanf("%c",&cc)!=EOF)
     57     {
     58         if(cc=='E')
     59         {
     60             scanf("%d%d",&n,&m);
     61             w[n] = m;
     62             maxz = max(maxz,n);
     63             for(i = 1; i <= m ;i++)
     64             {
     65                 getchar();
     66                 scanf("%d.%d.%d.%d/%d",&a,&b,&c,&d,&e);
     67                 g=0;
     68                 change(a);change(b);change(c);change(d);
     69                 ip[n][i][0] = swit(1,0);
     70                 ip[n][i][1] = swit(2,e);
     71             }
     72         }
     73         else if(cc=='F')
     74         {
     75             scanf("%d.%d.%d.%d",&a,&b,&c,&d);
     76             g=0;
     77             change(a);change(b);change(c);change(d);
     78             LL fs1 = swit(1,0);
     79             scanf("%d.%d.%d.%d",&a,&b,&c,&d);
     80             g=0;
     81             change(a);change(b);change(c);change(d);
     82             LL fs2 = swit(1,0);
     83             int flag = 0;
     84             for(i = 1 ; i <= maxz ; i++)
     85             {
     86                 int f=0,ff=0;
     87                 if(vis[i]) continue;
     88                 for(j = 1; j <= w[i] ; j++)
     89                 {
     90                     if(fs1>=ip[i][j][0]&&fs1<=ip[i][j][1])
     91                     f = 1;
     92                     if(fs2>=ip[i][j][0]&&fs2<=ip[i][j][1])
     93                     ff = 1;
     94                 }
     95                 if(ff&&f)
     96                 {
     97                     flag = 1;
     98                     break;
     99                 }
    100             }
    101             if(flag)
    102             printf("F
    ");
    103             else
    104             printf("D
    ");
    105         }
    106         else
    107         {
    108             scanf("%d",&n);
    109             vis[n] = 1;
    110         }
    111         gets(s);
    112     }
    113     return 0;
    114 }
    View Code
  • 相关阅读:
    UML类图与面向对象设计原则
    java学习:用反射构造bean
    Lucene基础(一)--入门
    Lucene基础(二)--索引的操作
    Lucene基础(三)-- 中文分词及高亮显示
    Lucene基础(四)-- 结合数据库使用
    JMS
    深入浅出JMS(一)——JMS简介
    深入浅出JMS(二)——JMS的组成
    八大排序算法
  • 原文地址:https://www.cnblogs.com/shangyu/p/3397455.html
Copyright © 2020-2023  润新知