Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 16th, 2010 | Syntax: None | Size: 4.88 KB | Hits: 47 | Expires: Never
Copy text to clipboard
  1. import java.io.*;
  2.  
  3. class A2 {
  4.         static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  5.         static Macierz[] macierze=new Macierz[100];
  6.         static boolean[] czyJest=new boolean[100];
  7.         private static class Macierz {
  8.                 boolean czyDobra=false;
  9.                 int[][] wartosci;
  10.                 int n;
  11.                 int m;
  12.                 Macierz() {}
  13.                 Macierz(int n, int m, int [][] wartosci) {
  14.                         this.czyDobra=true;
  15.                         this.wartosci=new int[n][m];
  16.                         this.n=n;
  17.                         this.m=m;
  18.                         for(int i=0; i<n; i++)
  19.                                 for(int j=0; j<m; j++)
  20.                                         this.wartosci[i][j]=wartosci[i][j];
  21.                 }
  22.                 Macierz(int n, int m) {
  23.                         this.czyDobra=true;
  24.                         this.wartosci=new int[n][m];
  25.                         this.n=n;
  26.                         this.m=m;
  27.                         for(int j=0; j<n; j++) {
  28.                                 try {
  29.                                         String liczby=reader.readLine();
  30.                                         char[] zuo=liczby.toCharArray();
  31.                                         int i=0;
  32.                                         for(int k=0; k<m; k++) {
  33.                                                 int x=0;
  34.                                                 int awb=1;
  35.                                                 if(i<zuo.length && zuo[i]=='-') {awb=-1; i++;}
  36.                                                 while(i<zuo.length && zuo[i]!=' ') {x*=10; x+=(int)zuo[i]-48; i++;}
  37.                                                 i++;
  38.                                                 x*=awb;
  39.                                                 this.wartosci[j][k]=x;
  40.                                         }
  41.                                 } catch(IOException e) {}
  42.                         }
  43.                 }
  44.                 public String toString() {
  45.                         if(!this.czyDobra) return("UNDEFINE");
  46.                         else{
  47.                                 String wynik="";
  48.                                 for(int i=0; i<this.n; i++) {
  49.                                         for(int j=0; j<this.m; j++)
  50.                                                 wynik+=Integer.toString(wartosci[i][j])+" ";
  51.                                         if(i<this.n-1) wynik+="\n";
  52.                                 }
  53.                                 return wynik;
  54.                         }
  55.                 }
  56.         }
  57.         private static Macierz suma(Macierz A, Macierz B) {
  58.                 if(!A.czyDobra) return new Macierz();
  59.                 if(!B.czyDobra) return new Macierz();
  60.                 if(A.n != B.n || A.m != B.m) return new Macierz();
  61.                 else {
  62.                         int n=A.n;
  63.                         int m=A.m;
  64.                         int[][] wartosci = new int[n][m];
  65.                         for(int i=0; i<n; i++)
  66.                                 for(int j=0; j<m; j++)
  67.                                         wartosci[i][j]=A.wartosci[i][j]+B.wartosci[i][j];
  68.                         Macierz wynik=new Macierz(n,m,wartosci);
  69.                         return wynik;
  70.                 }
  71.         }
  72.         private static Macierz roznica(Macierz A, Macierz B) {
  73.                 if(!A.czyDobra) return new Macierz();
  74.                 if(!B.czyDobra) return new Macierz();
  75.                 if(A.n != B.n || A.m != B.m) return new Macierz();
  76.                 else {
  77.                         int n=A.n;
  78.                         int m=A.m;
  79.                         int[][] wartosci = new int[n][m];
  80.                         for(int i=0; i<n; i++)
  81.                                 for(int j=0; j<m; j++)
  82.                                         wartosci[i][j]=A.wartosci[i][j]-B.wartosci[i][j];
  83.                         Macierz wynik=new Macierz(n,m,wartosci);
  84.                         return wynik;
  85.                 }
  86.         }
  87.         private static Macierz iloczyn(Macierz A, Macierz B) {
  88.                 if(!A.czyDobra) return new Macierz();
  89.                 if(!B.czyDobra) return new Macierz();
  90.                 if(A.m != B.n) return new Macierz();
  91.                 else {
  92.                         int n=A.n;
  93.                         int m=B.m;
  94.                         int zuo=A.m;
  95.                         int [][] wartosci= new int [n][m];
  96.                         for(int i=0; i<n; i++)
  97.                                 for(int j=0; j<m; j++)
  98.                                         for(int k=0; k<zuo; k++)
  99.                                                 wartosci[i][j]+=A.wartosci[i][k]*B.wartosci[k][j];
  100.                         Macierz wynik= new Macierz(n,m,wartosci);
  101.                         return wynik;
  102.                 }
  103.         }
  104.         private static Macierz hardkor(Macierz pierwsza, char[] wyrazenie, int i) {    
  105.                 if(pierwsza.czyDobra) {
  106.                         //System.out.println(pierwsza);
  107.                         if(i==wyrazenie.length-1) return pierwsza;
  108.                         if(wyrazenie[i+1]=='+')
  109.                                 if(czyJest[(int)wyrazenie[i+2]-65])
  110.                                         return suma(pierwsza, hardkor(macierze[(int)wyrazenie[i+2]-65], wyrazenie, i+2));
  111.                                 else return new Macierz();
  112.                        
  113.                         if(wyrazenie[i+1]=='-')
  114.                                 if(czyJest[(int)wyrazenie[i+2]-65])
  115.                                         return roznica(pierwsza, hardkor(macierze[(int)wyrazenie[i+2]-65], wyrazenie, i+2));
  116.                                 else return new Macierz();
  117.                         else
  118.                                 if(czyJest[(int)wyrazenie[i+2]-65]) {
  119.                                         Macierz druga=macierze[(int)wyrazenie[i+2]-65];
  120.                                         Macierz nowa=iloczyn(pierwsza, druga);
  121.                                         return hardkor(nowa, wyrazenie, i+2);
  122.                                 }
  123.                                 else return new Macierz();
  124.                 }
  125.                 else return pierwsza;
  126.         }
  127.         public static void main(String[] args) {
  128.                 while(true) try{
  129.                         String wczytane = reader.readLine();
  130.                         char[] polecenie;
  131.                         if(wczytane != null) polecenie = wczytane.toCharArray();
  132.                         else return;
  133.                         if(polecenie[0]=='m') {
  134.                                 int kodMacierzy=(int)polecenie[7]-65;
  135.                                 int n=0, m=0;
  136.                                 int i=9;
  137.                                 while(i<polecenie.length &&polecenie[i]!=' ') {
  138.                                         m*=10;
  139.                                         m+=(int)polecenie[i]-48;
  140.                                         i++;
  141.                                 }
  142.                                 i++;
  143.                                 while(i<polecenie.length && polecenie[i]!=' ') {
  144.                                         n*=10;
  145.                                         n+=(int)polecenie[i]-48;
  146.                                         i++;
  147.                                 }
  148.                                 macierze[kodMacierzy]=new Macierz(n, m);
  149.                                 czyJest[kodMacierzy]=true;
  150.                         }
  151.                         if(polecenie[0]=='p') {
  152.                                 int kodMacierzy=(int)polecenie[6]-65;
  153.                                 if(czyJest[kodMacierzy]) System.out.println(macierze[kodMacierzy]);
  154.                                 else System.out.println("UNDEFINE");
  155.                         }
  156.                         if(polecenie[0]=='c') {
  157.                                 char[] wyrazenie=new char[polecenie.length-11];
  158.                                 for(int i=6; i<polecenie.length-5; i++) {
  159.                                         wyrazenie[i-6]=polecenie[i];
  160.                                 }
  161.                                 int kodMacierzy=(int)polecenie[polecenie.length-1]-65;
  162.                                 //System.out.println(wyrazenie);
  163.                                 if(czyJest[(int)wyrazenie[0]-65])
  164.                                         macierze[kodMacierzy]=hardkor(macierze[(int)wyrazenie[0]-65],wyrazenie,0);
  165.                                 else macierze[kodMacierzy]=new Macierz();
  166.                                 czyJest[kodMacierzy]=true;
  167.                         }
  168.                 } catch(IOException e) {return;}
  169.         }
  170. }