1 条题解

  • 0
    @ 2025-4-12 21:45:14

    C :

    #include<stdio.h>
    
    int main()
    {
    	int sou[4],netMask[4],subNet[4],n,i;
    	for(i=0;i<4;i++)
    		scanf("%d%*c",&sou[i]);
    	for(i=0;i<4;i++)
    	{
    		scanf("%d%*c",&netMask[i]);
    		sou[i]&=netMask[i];
    	}
    	scanf("%d",&n);
    	while(n--)
    	{
    		for(i=0;i<4;i++)
    		{
    			scanf("%d%*c",&subNet[i]);
    			subNet[i]&=netMask[i];
    		}
    		for(i=0;i<4;i++)
    		{
    			if(sou[i]^subNet[i])
    				break;
    		}
    		if(i<4)
    			puts("OUTER");
    		else
    			puts("INNER");
    	}
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    
    int main()
    {
    	int sou[4],netMask[4],subNet[4],n,i;
    	for(i=0;i<4;i++)
    		scanf("%d%*c",&sou[i]);
    	for(i=0;i<4;i++)
    	{
    		scanf("%d%*c",&netMask[i]);
    		sou[i]&=netMask[i];
    	}
    	scanf("%d",&n);
    	while(n--)
    	{
    		for(i=0;i<4;i++)
    		{
    			scanf("%d%*c",&subNet[i]);
    			subNet[i]&=netMask[i];
    		}
    		for(i=0;i<4;i++)
    		{
    			if(sou[i]^subNet[i])
    				break;
    		}
    		if(i<4)
    			puts("OUTER");
    		else
    			puts("INNER");
    	}
    	return 0;
    }
    

    Pascal :

    program p1033;
    type ztk=array[1..4] of longint;
    var n,i,s,p:longint;
          my,tr,zi:ztk;
    	  x,o,d,che:string;
    procedure calm(a,b:ztk;q:longint);
    var i,k:longint;
          c,c1,d1,d2:string;
    begin
     d1:='';d2:='';d:='';
     for i:=1 to 4 do begin
      k:=a[i];
      c1:='';
      repeat 
        str(k mod 2,c);
        c1:=c+c1;
        k:=k div 2;
      until k=0;
      while length(c1)<8 do c1:='0'+c1;
      d1:=d1+c1+'.';
     end;
      for i:=1 to 4 do begin
      k:=b[i];
      c1:='';
      repeat 
        str(k mod 2,c);
        c1:=c+c1;
        k:=k div 2;
      until k=0;
      while length(c1)<8 do c1:='0'+c1;
      d2:=d2+c1+'.';
     end;
     for i:=1 to 36 do 
      if (d1[i]='.') and (d2[i]='.') then d:=d+'.'
      else if (d1[i]='0') or (d2[i]='0') then d:=d+'0' else d:=d+'1';
     if q=1 then che:=d;
    end;
     
    begin 
     readln(x);
     x:=x+'.';s:=0;
     repeat
      inc(s);
      p:=pos('.',x);
      val(copy(x,1,p-1),my[s]);
      delete(x,1,p);
     until x='';
     readln(x);
     x:=x+'.';s:=0;
     repeat
      inc(s);
      p:=pos('.',x);
      val(copy(x,1,p-1),zi[s]);
      delete(x,1,p);
     until x='';
     calm(my,zi,1);
     readln(n);
     for i:=1 to n do begin
      readln(o);
       o:=o+'.';s:=0;
     repeat
      inc(s);
      p:=pos('.',o);
      val(copy(o,1,p-1),tr[s]);
      delete(o,1,p);
     until o='';
     calm(tr,zi,0);
     if che=d then writeln('INNER') else writeln('OUTER');
    end;
    end .
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    	
    	public static int doAnd(int ip, int net){
    		return ip & net;
    	}
    
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		String locIp = in.nextLine();
    		String[] locIptem = locIp.split("\\.");
    		int[] locIps = new int[4];
    		for(int i=0;i<4;i++)locIps[i] = Integer.parseInt(locIptem[i]);
    		String sub = in.nextLine();
    		String[] subtem = sub.split("\\.");
    		int[] subs = new int[4];
    		for(int i=0;i<4;i++)subs[i] = Integer.parseInt(subtem[i]);
    		int[] and = new int[4];
    		for(int i=0;i<4;i++)and[i] = locIps[i]&subs[i];
    		int n = Integer.parseInt(in.nextLine());
    		String[] ss = new String[n];
    		for(int i=0;i<n;i++){
    			ss[i] = in.nextLine();
    			String[] iptem = ss[i].split("\\.");
    			int[] ips = new int[4];
    			for(int j=0;j<4;j++)ips[j] = Integer.parseInt(iptem[j]);
    			int[] andtem = new int[4];
    			for(int j=0;j<4;j++)andtem[j] = ips[j]&subs[j];
    			boolean out = true;
    			for(int j=0;j<4;j++){
    				if(and[j] != andtem[j]){
    					out = false;
    					break;
    				}
    			}
    			if(out)System.out.println("INNER");
    			else System.out.println("OUTER");
    		}
    		
    	}
    
    }
    
    

    Python :

    import sys
      
    dataip,datama = [],[]
    l = 1
    for line in sys.stdin:
        a = line.split()[0]
        if l == 1:
           dataip.append(a)
        elif l==2:
           datama.append(a)
        elif a.find('.')!=-1:
           dataip.append(a)
        l += 1
    
    datama=map(lambda x:x.split('.'),datama)
    dataip=map(lambda x:x.split('.'),dataip)
    new = []
    for i in xrange(len(dataip)):
        b = []
        for j in [0,1,2,3]:
            a = int(dataip[i][j])&int(datama[0][j])
            b.append(a)
        new.append('.'.join([str(k) for k in b]))
    
    for i in xrange(1,len(new)):
        if new[i]==new[0]:
           print 'INNER'
        else:
           print 'OUTER'
    
    
    • 1

    信息

    ID
    1410
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者