Advertisement
Guest User

OpencupEastern041112

a guest
Nov 5th, 2012
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.27 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.util.Hashtable;
  6.  
  7.  
  8. public class M {
  9.     static Hashtable<String, Integer> masks=new Hashtable<String, Integer>();
  10.     public static void addMask(String mask,int val){
  11.         Integer c=masks.get(mask);
  12.         if(c==null){
  13.             c=0;
  14.         }
  15.         else{
  16.             //добавляем к счетчику вида текущий счетчик маски
  17.             maskCounters[val]+=c;
  18.         }
  19.         //увеличиваем счетчик маски
  20.         c++;
  21.         masks.put(mask,c);
  22.     }
  23.     //всего 14 элементов, значение по 0 индексу не используется
  24.     static int[] maskCounters=new int[15];
  25.     static int count1=0;
  26.     static int count2=0;
  27.     static int count3=0;
  28.     static int count4=0;
  29.     public static void main(String[] args) throws NumberFormatException, IOException {
  30.         BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
  31.         PrintWriter out=new PrintWriter(System.out);
  32.    
  33.        
  34.         int n=Integer.parseInt(in.readLine());
  35.         char[][] masks=new char[n][4];
  36.        
  37.         for(int i=0; i<n; i++){
  38.             char[] cur=in.readLine().toCharArray();
  39.             masks[i]=cur;
  40.            
  41.             //создаем маски
  42.             char[] mask1=cur.clone();
  43.            
  44.             mask1[0]='*';
  45.             char[] mask2=cur.clone();
  46.             mask2[1]='*';
  47.             char[] mask3=cur.clone();
  48.             mask3[2]='*';
  49.             char[] mask4=cur.clone();
  50.             mask4[3]='*';
  51.             char[] mask5=cur.clone();
  52.             mask5[0]='*';
  53.             mask5[1]='*';
  54.             char[] mask6=cur.clone();
  55.             mask6[1]='*';
  56.             mask6[2]='*';
  57.             char[] mask7=cur.clone();
  58.             mask7[2]='*';
  59.             mask7[3]='*';
  60.             char[] mask8=cur.clone();
  61.             mask8[0]='*';
  62.             mask8[2]='*';
  63.             char[] mask9=cur.clone();
  64.             mask9[1]='*';
  65.             mask9[3]='*';
  66.             char[] mask10=cur.clone();
  67.             mask10[0]='*';
  68.             mask10[3]='*';
  69.             char[] mask11=cur.clone();
  70.             mask11[0]='*';
  71.             mask11[1]='*';
  72.             mask11[2]='*';
  73.             char[] mask12=cur.clone();
  74.             mask12[1]='*';
  75.             mask12[2]='*';
  76.             mask12[3]='*';
  77.             char[] mask13=cur.clone();
  78.             mask13[0]='*';
  79.             mask13[1]='*';
  80.             mask13[3]='*';
  81.             char[] mask14=cur.clone();
  82.             mask14[0]='*';
  83.             mask14[2]='*';
  84.             mask14[3]='*';
  85.             addMask(new String(mask1),1);
  86.             addMask(new String(mask2),2);
  87.             addMask(new String(mask3),3);
  88.             addMask(new String(mask4),4);
  89.             addMask(new String(mask5),5);
  90.             addMask(new String(mask6),6);
  91.             addMask(new String(mask7),7);
  92.             addMask(new String(mask8),8);
  93.             addMask(new String(mask9),9);
  94.             addMask(new String(mask10),10);
  95.             addMask(new String(mask11),11);
  96.             addMask(new String(mask12),12);
  97.             addMask(new String(mask13),13);
  98.             addMask(new String(mask14),14);
  99.         }
  100.         //собираем маски для 1 расхождения
  101.         count1=maskCounters[1]+maskCounters[2]+maskCounters[3]+maskCounters[4];
  102.        
  103.        
  104.         //очищаем маски для 2х расхождения
  105.         maskCounters[5]-=maskCounters[1]+maskCounters[2];
  106.         maskCounters[6]-=maskCounters[2]+maskCounters[3];
  107.         maskCounters[7]-=maskCounters[3]+maskCounters[4];
  108.         maskCounters[8]-=maskCounters[1]+maskCounters[3];
  109.         maskCounters[9]-=maskCounters[2]+maskCounters[4];
  110.         maskCounters[10]-=maskCounters[1]+maskCounters[4];
  111.  
  112.         //собираем маски для 2 расхождений
  113.         count2=maskCounters[5]+maskCounters[6]+maskCounters[7]+maskCounters[8]+maskCounters[9]+maskCounters[10];
  114.  
  115.         //очищаем маски для 3х расхождения
  116.         maskCounters[11]-=(maskCounters[1]+maskCounters[2]+maskCounters[3]+maskCounters[5]+maskCounters[6]+maskCounters[8]);
  117.         maskCounters[12]-=(maskCounters[2]+maskCounters[3]+maskCounters[4]+maskCounters[6]+maskCounters[7]+maskCounters[9]);
  118.         maskCounters[13]-=(maskCounters[1]+maskCounters[2]+maskCounters[4]+maskCounters[5]+maskCounters[9]+maskCounters[10]);
  119.         maskCounters[14]-=(maskCounters[1]+maskCounters[3]+maskCounters[4]+maskCounters[7]+maskCounters[8]+maskCounters[10]);
  120.        
  121.         //собираем маски для 3 расхождений
  122.         count3=maskCounters[11]+maskCounters[12]+maskCounters[13]+maskCounters[14];
  123.  
  124.         //считаем результат для 4 расхождений вычитанием из максимума пар
  125.         count4=(int)((long)n*(n-1)/2)-(count1+count2+count3);
  126.         out.println(count1+" "+count2+" "+count3+" "+count4);
  127.         //in.close();
  128.         out.close();
  129.        
  130.     }
  131.  
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement