結果
問題 | No.84 悪の算盤 |
ユーザー | IL_msta |
提出日時 | 2015-05-31 18:31:52 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 6,951 bytes |
コンパイル時間 | 584 ms |
コンパイル使用メモリ | 66,820 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-13 08:52:32 |
合計ジャッジ時間 | 1,149 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 1 ms
5,248 KB |
testcase_05 | AC | 1 ms
5,248 KB |
testcase_06 | AC | 1 ms
5,248 KB |
testcase_07 | AC | 1 ms
5,248 KB |
testcase_08 | AC | 1 ms
5,248 KB |
testcase_09 | AC | 1 ms
5,248 KB |
testcase_10 | AC | 2 ms
5,248 KB |
testcase_11 | AC | 1 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
ソースコード
#include <iostream> #include <iomanip> #include <algorithm> #include <string> ///////// #define REP(i, x, n) for(int i = x; i < n; i++) #define rep(i,n) REP(i,0,n) #define P(p) cout<<(p)<<endl; ///////// typedef long long LL; typedef long double LD; ///////// using namespace::std; ///////// int mul3(int a,int b,int c,int x,int y,int z,int* ans1,int* ans2,int* ans3){ *ans1 = 0; *ans2 = 0; *ans3 = 0; const int keta = 10000; int ans[7]; int temp; ans[0]=0; ans[1]=0; ans[2]=0; ans[3]=0; ans[4]=0; ans[5]=0; ans[6]=0; temp = c*z; ans[0] = temp%keta; ans[1] += temp/keta; temp = (b*z+c*y); ans[1] += temp%keta; ans[2] += (temp/keta)%keta + ans[1]/keta; ans[1] = ans[1]%keta; ans[3] += (temp/keta)/keta + ans[2]/keta; ans[2] = ans[2]%keta; temp = (a*z+b*y+c*x); ans[2] += temp%keta; ans[3] += (temp/keta)%keta + ans[2]/keta; ans[2] = ans[2]%keta; ans[4] += (temp/keta)/keta + ans[3]/keta; ans[3] = ans[3]%keta; temp = a*y+b*x; ans[3] += temp%keta; ans[4] += (temp/keta)%keta + ans[3]/keta; ans[3] = ans[3]%keta; ans[5] += (temp/keta)/keta + ans[4]/keta; ans[4] = ans[4]%keta; temp = a*x; ans[4] += temp%keta; ans[5] += (temp/keta)%keta + ans[4]/keta; ans[4] = ans[4]%keta; ans[6] += (temp/keta)/keta + ans[5]/keta; ans[5] = ans[5]%keta; *ans3 = ans[1]*keta + ans[0]; *ans2 = ans[3]*keta + ans[2]; *ans1 = ans[5]*keta + ans[4]; return ans[6]; } int add3(int a,int b,int c,int x,int y,int z,int* ans1,int* ans2,int* ans3){ *ans1 = 0; *ans2 = 0; *ans3 = 0; const int keta = 10000; int ans[7]; int temp; int kuri = 0; ans[0]=0; ans[1]=0; ans[2]=0; ans[3]=0; ans[4]=0; ans[5]=0; ans[6]=0; temp = c+z; if(temp < 0){ temp += keta; kuri = 1; }else{kuri=0;} ans[0] = temp%keta; ans[1] += temp/keta; temp = b+y - kuri; if( temp < 0){ temp += keta; kuri = 1; }else{kuri = 0;} ans[1] += temp%keta; ans[2] += temp/keta + ans[1]/keta; ans[1] = ans[1]%keta; temp = a+x - kuri; if( temp < 0){ temp += keta; kuri = 1; }else{kuri = 0;} ans[2] += temp%keta; ans[3] += temp/keta + ans[2]/keta; ans[2] = ans[2]%keta; int ans0 = ans[3]/keta; ans[3] = ans[3]%keta; *ans3 = ans[1]*keta + ans[0]; *ans2 = ans[3]*keta + ans[2]; return ans0; } //4 4 4 4 4 4 ,4 4 4,8 8 8 int add3(int a0,int a1,int a2, int a3,int a4,int a5, int x,int y,int z,int* ans1,int* ans2,int* ans3){ *ans1 = 0; *ans2 = 0; *ans3 = 0; const int keta = 10000; int ans[7]; int temp; int kuri = 0; ans[0]=0; ans[1]=0; ans[2]=0; ans[3]=0; ans[4]=0; ans[5]=0; ans[6]=0; temp = a5+z; if(temp < 0){ temp += keta; kuri = 1; }else{kuri=0;} ans[0] = temp%keta; ans[1] += temp/keta; temp = a4+y - kuri; if( temp < 0){ temp += keta; kuri = 1; }else{kuri = 0;} ans[1] += temp%keta; ans[2] += temp/keta + ans[1]/keta; ans[1] = ans[1]%keta; temp = a3+x - kuri; if( temp < 0){ temp += keta; kuri = 1; }else{kuri = 0;} ans[2] += temp%keta; ans[3] += temp/keta + ans[2]/keta; ans[2] = ans[2]%keta; //////////////// temp = a2 - kuri; if( temp < 0){ temp += keta; kuri = 1; }else{kuri = 0;} ans[3] += temp%keta; ans[4] += temp/keta + ans[3]/keta; ans[3] = ans[3]%keta; ///////////////// temp = a1 - kuri; if( temp < 0){ temp += keta; kuri = 1; }else{kuri = 0;} ans[4] += temp%keta; ans[5] += temp/keta + ans[4]/keta; ans[4] = ans[4]%keta; ////////////// temp = a0 - kuri; if( temp < 0){ temp += keta; kuri = 1; }else{kuri = 0;} ans[5] += temp%keta; ans[6] += temp/keta + ans[5]/keta; ans[5] = ans[5]%keta; ////////////// //// //int ans0 = ans[3]/keta; ans[3] = ans[3]%keta; *ans3 = ans[1]*keta + ans[0]; *ans2 = ans[3]*keta + ans[2]; *ans1 = ans[5]*keta + ans[4]; return ans[6]; } bool vi(int n,bool top){ if(top == true){ if(n == 0){ return true; } else{ cout << n; return false; } }else{ if( n >= 10000000){cout << n;} else if( n >= 1000000){cout << "0" << n;} else if( n >= 100000){cout << "00" << n;} else if( n >= 10000){cout << "000" << n;} else if( n >= 1000){cout << "0000" << n;} else if( n >= 100){cout << "00000" << n;} else if( n >= 10){cout << "000000" << n;} else {cout << "0000000" << n;} } return false; } int main(void){ cin.tie(0); ios::sync_with_stdio(false); cout << fixed;// //cout << setprecision(7);// int R,C;//[1,10^9] cin>>R>>C; int ans0,ans1,ans2,ans3; ans0 = 0; ans1 = 0; ans2 = 0; ans3 = 0; int tempA,tempB; int A[3]; int B[3]; A[0]=0;A[1]=0;A[2]=0; B[0]=0;B[1]=0;B[2]=0; const int keta = 10000; if( R%2==0 && C%2==0 ){ // RC/4 if(R == C){ tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C/2; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); } else{ tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); } } else if( R%2 != C%2){ if(R%2==0){ //C*R/2 tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); }else{//C%2==0 //R*C/2 tempA = R; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C/2; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); } }else{//R%2==C%2==1 if(R != 1 && C != 1 && R!=C){ tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); ans0 += add3(ans1/keta,ans1%keta, ans2/keta,ans2%keta, ans3/keta,ans3%keta,((C/2+1)/keta)/keta,((C/2+1)/keta)%keta,(C/2+1)%keta,&ans1,&ans2,&ans3); }else{//R==C //+R/2 tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C/2; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); ans0 += add3(ans1/keta,ans1%keta, ans2/keta,ans2%keta, ans3/keta,ans3%keta,((C/2+1)/keta)/keta,((C/2+1)/keta)%keta,(C/2+1)%keta,&ans1,&ans2,&ans3); } } ans0 += add3(ans1/keta,ans1%keta, ans2/keta,ans2%keta, ans3/keta,ans3%keta,0,0,-1,&ans1,&ans2,&ans3); bool top = true; top = vi(ans0,top); top = vi(ans1,top); top = vi(ans2,top); top = vi(ans3,top); if(top == true){ cout << "0"; } cout << endl; return 0; }