Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector <string> onp;
  4. vector <string> dzialania;
  5. vector <long long> wynik;
  6. const int q=10007;
  7. bool czy_znak(string znak)
  8. {
  9.     if(znak=="+" || znak=="*" || znak=="^" || znak=="(" || znak==")")
  10.     return true;
  11.     else
  12.     return false;
  13. }
  14. void znakowe(string znak)
  15. {
  16.     if(znak=="+")
  17.     {
  18.         while(!dzialania.empty() && (dzialania.back()=="*" || dzialania.back()=="^") )
  19.         {
  20.             onp.push_back( dzialania.back() );
  21.             dzialania.pop_back();
  22.         }
  23.         dzialania.push_back(znak);
  24.     }
  25.     else if(znak=="*")
  26.     {
  27.         while(!dzialania.empty() && dzialania.back()=="^")
  28.         {
  29.             onp.push_back( dzialania.back() );
  30.             dzialania.pop_back();
  31.         }
  32.         dzialania.push_back(znak);
  33.     }
  34.     else if(znak=="^")
  35.     {
  36.         dzialania.push_back(znak);
  37.     }
  38.     else if(znak=="(")
  39.     {
  40.         dzialania.push_back(znak);
  41.     }
  42.     else if(znak==")")
  43.     {
  44.         while( !dzialania.empty() && dzialania.back()!="(")
  45.         {
  46.             onp.push_back( dzialania.back() );
  47.             dzialania.pop_back();
  48.         }
  49.         dzialania.pop_back();
  50.         if(!dzialania.empty())
  51.         {
  52.             onp.push_back( dzialania.back() );
  53.             dzialania.pop_back();
  54.         }
  55.     }
  56. }
  57. long long potegowanie(long long  a, long long  k, int q)
  58. {
  59.   if (a==0 && k==0) return 1;
  60.   if(k==0) return 1;
  61.   else if(k%2==0) return (potegowanie(a, k/2, q)*(potegowanie(a, k/2, q)))%q;
  62.   else return (a*(potegowanie(a, (k-1), q)))%q;
  63. }
  64. long long  dzialaj(long long a, long long b, string znak)
  65. {
  66.     if(znak=="+")
  67.     {
  68.         return (a+b)%q;
  69.     }
  70.     else if (znak=="*")
  71.     {
  72.         return (a*b)%q;
  73.     }
  74.     else if(znak=="^")
  75.     {
  76.         return potegowanie(b, a , q)%q;
  77.     }
  78. }
  79. int main()
  80. {
  81.     int z;
  82.     cin>>z;
  83.     for(int i=0; i<z; i++)
  84.     {  
  85.         int dlugosc;
  86.         string znak;
  87.         cin>>dlugosc;
  88.         for(int j=0; j<dlugosc; j++)
  89.         {
  90.             cin>>znak;
  91.             if(czy_znak(znak))
  92.             {
  93.                 znakowe(znak);
  94.             }
  95.             else
  96.             {
  97.                 onp.push_back(znak);
  98.             }
  99.         }
  100.         while(!dzialania.empty())
  101.         {
  102.             onp.push_back( dzialania.back() );
  103.             dzialania.pop_back();
  104.         }
  105.         for(int j=0; j<onp.size(); j++)
  106.         {
  107.             if(j>0)
  108.             {
  109.                 cout<<" ";
  110.             }
  111.             cout<<onp[j];
  112.         }
  113.         cout<<endl;
  114.         for(int j=0; j<onp.size(); j++)
  115.         {
  116.             if( czy_znak(onp[j]) )
  117.             {
  118.                 long long a=wynik.back();
  119.                 wynik.pop_back();
  120.                 long long b=wynik.back();
  121.                 wynik.pop_back();
  122.                 wynik.push_back( dzialaj(a, b, onp[j] ) );
  123.             }
  124.             else
  125.             {
  126.                 long long  x=atoi(onp[j].c_str());
  127.                 wynik.push_back(x%q);
  128.             }
  129.         }
  130.         wynik[0]%=q;
  131.         cout<<wynik[0]<<endl;
  132.         wynik.clear();
  133.         onp.clear();
  134.         dzialania.clear();
  135.            
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement