結果
問題 | No.403 2^2^2 |
ユーザー |
![]() |
提出日時 | 2016-08-13 03:09:37 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 3,426 bytes |
コンパイル時間 | 1,182 ms |
コンパイル使用メモリ | 98,448 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-07 16:18:41 |
合計ジャッジ時間 | 1,975 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include <iostream>#include <string>#include <vector>#include <algorithm>#include <cstdio>#include <queue>#include "math.h"#include <complex>#include <iomanip>#define ifor(i,a,b) for (int i=(a);i<(b);i++)#define rfor(i,a,b) for (int i=(b)-1;i>=(a);i--)#define rep(i,n) for (int i=0;i<(n);i++)#define rrep(i,n) for (int i=(n)-1;i>=0;i--)using namespace std;typedef long double ld;typedef unsigned long long int lli;typedef complex <double> P;const double eps = 1e-11;int vex[4]={1,0,-1,0};int vey[4]={0,1,0,-1};typedef vector<double> Vec;typedef vector<int> vec;typedef vector<Vec> MAT;typedef vector<vec> mat;lli MOD=1000000007;//Ax=bをとくAは正方行列//rankA<=min(m,n)ならば配列0のvecが帰るVec gauss_jordan(const MAT& A,const Vec&b){int n = A.size();MAT B (n,Vec(n+1));rep(i,n)rep(j,n)B[i][j]=A[i][j];rep(i,n)B[i][n]=b[i];rep(i,n){int pivot = i;for(int j= i;j<n;j++){if(abs(B[j][i])>abs(B[pivot][i]))pivot = j;}swap(B[i],B[pivot]);if(abs(B[i][i])<eps)return Vec();//B_i_i成分が0であるつまり階数がfor(int j =i +1 ;j<=n;j++)B[i][j]/=B[i][i];rep(j,n){if(i!=j)for(int k = i+1;k<=n;k++){B[j][k] -=B[j][i]*B[i][k];}}}Vec x(n);for(int i =0;i<n;i++){x[i]= B[i][n];}return x;}double det(const MAT& A){int n = A.size();MAT B (n,Vec(n));rep(i,n)rep(j,n)B[i][j]=A[i][j];double ans = 1;rep(i,n){int pivot = i;for(int j=i;j<n;j++){if(abs(B[j][i])>abs(B[pivot][i]))pivot = j;}if(i!=pivot)ans *= -1;swap(B[i],B[pivot]);if(abs(B[i][i])<eps)return 0;ans *= B[i][i];for(int j =i +1 ;j<n;j++)B[i][j]/=B[i][i];rep(j,n){if(i!=j)for(int k = i+1;k<n;k++){B[j][k] -=B[j][i]*B[i][k];}}}return ans;}int rank(const MAT& A){int n = A.size();MAT B (n,Vec(n));rep(i,n)rep(j,n)B[i][j]=A[i][j];rep(i,n){int pivot = i;for(int j=i;j<n;j++){if(abs(B[j][i])>abs(B[pivot][i]))pivot = j;}swap(B[i],B[pivot]);if(abs(B[i][i])<eps)return i;for(int j =i +1 ;j<n;j++)B[i][j]/=B[i][i];rep(j,n){if(i!=j)for(int k = i+1;k<n;k++){B[j][k] -=B[j][i]*B[i][k];}}}return n;}lli euler(lli m){vector<int> p;lli M = m;for(int i = 2;i<=m;i++){if(m%i==0){p.push_back(i);while(m%i==0)m/=i;}if(M<i*i&&p.size()==0){p.push_back(M);break;}}lli ans = M;rep(i,p.size()){//cout << p[i]<<endl;ans = ans * (p[i]-1)/p[i];}return ans;}lli powm(lli a,lli p,lli mod){lli ans =1;a %=mod;while(p>0){if(p&1)ans=(ans*a) % mod;a=(a*a)%mod;p >>=1;}return ans%mod;}lli inv(lli a,lli mod){return powm(a,euler(mod)-1,mod);}lli gcd(lli A,lli B){if(A%B==0)return B;else return gcd(B,A%B);}mat mul_mat_mod(mat A,mat B,lli m){int n = A.size();mat C (n,vec(n));rep(i,n)rep(j,n)rep(k,n){C[i][j]+=A[i][k]*B[k][j] %m;C[i][j]%=m;}return C;}mat pow_mat(mat A,lli p,lli mod){int n= A.size();mat B = mat(n,vec(n));while(p>0){if(p&1){B=mul_mat_mod(A,B,mod);}A = mul_mat_mod(A,A,mod);p>>=1;}return B;}int main(){char c;lli A[3]={};int t =0;string s;cin >> s;rep(i,s.size()){c = s[i];if(c!='^'){A[t] = A[t]*10+c-'0';}else t++;}lli a= powm(powm(A[0],A[1],MOD),A[2],MOD);lli d= powm(A[1],A[2],MOD-1);lli b= powm(A[0],d,MOD);if(d==0)b=0;cout << a%MOD << ' '<<b%MOD<<endl;}