Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.util.Hashtable;
- public class M {
- static Hashtable<String, Integer> masks=new Hashtable<String, Integer>();
- public static void addMask(String mask,int val){
- Integer c=masks.get(mask);
- if(c==null){
- c=0;
- }
- else{
- //добавляем к счетчику вида текущий счетчик маски
- maskCounters[val]+=c;
- }
- //увеличиваем счетчик маски
- c++;
- masks.put(mask,c);
- }
- //всего 14 элементов, значение по 0 индексу не используется
- static int[] maskCounters=new int[15];
- static int count1=0;
- static int count2=0;
- static int count3=0;
- static int count4=0;
- public static void main(String[] args) throws NumberFormatException, IOException {
- BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
- PrintWriter out=new PrintWriter(System.out);
- int n=Integer.parseInt(in.readLine());
- char[][] masks=new char[n][4];
- for(int i=0; i<n; i++){
- char[] cur=in.readLine().toCharArray();
- masks[i]=cur;
- //создаем маски
- char[] mask1=cur.clone();
- mask1[0]='*';
- char[] mask2=cur.clone();
- mask2[1]='*';
- char[] mask3=cur.clone();
- mask3[2]='*';
- char[] mask4=cur.clone();
- mask4[3]='*';
- char[] mask5=cur.clone();
- mask5[0]='*';
- mask5[1]='*';
- char[] mask6=cur.clone();
- mask6[1]='*';
- mask6[2]='*';
- char[] mask7=cur.clone();
- mask7[2]='*';
- mask7[3]='*';
- char[] mask8=cur.clone();
- mask8[0]='*';
- mask8[2]='*';
- char[] mask9=cur.clone();
- mask9[1]='*';
- mask9[3]='*';
- char[] mask10=cur.clone();
- mask10[0]='*';
- mask10[3]='*';
- char[] mask11=cur.clone();
- mask11[0]='*';
- mask11[1]='*';
- mask11[2]='*';
- char[] mask12=cur.clone();
- mask12[1]='*';
- mask12[2]='*';
- mask12[3]='*';
- char[] mask13=cur.clone();
- mask13[0]='*';
- mask13[1]='*';
- mask13[3]='*';
- char[] mask14=cur.clone();
- mask14[0]='*';
- mask14[2]='*';
- mask14[3]='*';
- addMask(new String(mask1),1);
- addMask(new String(mask2),2);
- addMask(new String(mask3),3);
- addMask(new String(mask4),4);
- addMask(new String(mask5),5);
- addMask(new String(mask6),6);
- addMask(new String(mask7),7);
- addMask(new String(mask8),8);
- addMask(new String(mask9),9);
- addMask(new String(mask10),10);
- addMask(new String(mask11),11);
- addMask(new String(mask12),12);
- addMask(new String(mask13),13);
- addMask(new String(mask14),14);
- }
- //собираем маски для 1 расхождения
- count1=maskCounters[1]+maskCounters[2]+maskCounters[3]+maskCounters[4];
- //очищаем маски для 2х расхождения
- maskCounters[5]-=maskCounters[1]+maskCounters[2];
- maskCounters[6]-=maskCounters[2]+maskCounters[3];
- maskCounters[7]-=maskCounters[3]+maskCounters[4];
- maskCounters[8]-=maskCounters[1]+maskCounters[3];
- maskCounters[9]-=maskCounters[2]+maskCounters[4];
- maskCounters[10]-=maskCounters[1]+maskCounters[4];
- //собираем маски для 2 расхождений
- count2=maskCounters[5]+maskCounters[6]+maskCounters[7]+maskCounters[8]+maskCounters[9]+maskCounters[10];
- //очищаем маски для 3х расхождения
- maskCounters[11]-=(maskCounters[1]+maskCounters[2]+maskCounters[3]+maskCounters[5]+maskCounters[6]+maskCounters[8]);
- maskCounters[12]-=(maskCounters[2]+maskCounters[3]+maskCounters[4]+maskCounters[6]+maskCounters[7]+maskCounters[9]);
- maskCounters[13]-=(maskCounters[1]+maskCounters[2]+maskCounters[4]+maskCounters[5]+maskCounters[9]+maskCounters[10]);
- maskCounters[14]-=(maskCounters[1]+maskCounters[3]+maskCounters[4]+maskCounters[7]+maskCounters[8]+maskCounters[10]);
- //собираем маски для 3 расхождений
- count3=maskCounters[11]+maskCounters[12]+maskCounters[13]+maskCounters[14];
- //считаем результат для 4 расхождений вычитанием из максимума пар
- count4=(int)((long)n*(n-1)/2)-(count1+count2+count3);
- out.println(count1+" "+count2+" "+count3+" "+count4);
- //in.close();
- out.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement