結果
問題 | No.84 悪の算盤 |
ユーザー |
![]() |
提出日時 | 2015-05-31 18:29:16 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 6,965 bytes |
コンパイル時間 | 571 ms |
コンパイル使用メモリ | 66,844 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-13 08:52:24 |
合計ジャッジ時間 | 1,175 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 10 |
ソースコード
#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 L[100000];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 = 0;}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 = 0;}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 8int 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/4if(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/2tempA = 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/2tempA = 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==1if(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/2tempA = 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;}