結果

問題 No.1152 10億ゲーム
ユーザー chocoruskchocorusk
提出日時 2020-08-20 12:00:35
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
RE  
実行時間 -
コード長 3,984 bytes
コンパイル時間 1,452 ms
コンパイル使用メモリ 138,656 KB
実行使用メモリ 25,476 KB
平均クエリ数 24.78
最終ジャッジ日時 2024-07-17 06:02:34
合計ジャッジ時間 11,717 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 85 ms
25,220 KB
testcase_01 AC 82 ms
25,220 KB
testcase_02 RE -
testcase_03 RE -
testcase_04 AC 81 ms
24,580 KB
testcase_05 RE -
testcase_06 RE -
testcase_07 RE -
testcase_08 AC 81 ms
24,952 KB
testcase_09 AC 84 ms
25,220 KB
testcase_10 AC 82 ms
25,220 KB
testcase_11 AC 82 ms
25,220 KB
testcase_12 RE -
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 AC 81 ms
25,092 KB
testcase_17 RE -
testcase_18 RE -
testcase_19 RE -
testcase_20 AC 82 ms
24,580 KB
testcase_21 AC 83 ms
25,220 KB
testcase_22 AC 80 ms
25,220 KB
testcase_23 AC 82 ms
25,220 KB
testcase_24 RE -
testcase_25 RE -
testcase_26 RE -
testcase_27 RE -
testcase_28 RE -
testcase_29 RE -
testcase_30 RE -
testcase_31 RE -
testcase_32 RE -
testcase_33 RE -
testcase_34 RE -
testcase_35 RE -
testcase_36 RE -
testcase_37 RE -
testcase_38 AC 81 ms
24,964 KB
testcase_39 AC 80 ms
24,964 KB
testcase_40 RE -
testcase_41 RE -
testcase_42 RE -
testcase_43 RE -
testcase_44 RE -
testcase_45 RE -
testcase_46 AC 84 ms
24,580 KB
testcase_47 AC 82 ms
25,220 KB
testcase_48 AC 82 ms
24,580 KB
testcase_49 AC 83 ms
25,220 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>
#include <complex>
#include <unordered_map>
#include <unordered_set>
#include <random>
#include <cassert>
#include <fstream>
#include <utility>
#include <functional>
#include <time.h>
#include <stack>
#include <array>
#define popcount __builtin_popcount
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;
int dp[2][10][10][10][10];
P nx[10][10][10][10];
int deg[10][10][10][10];
const int INF=100;
int main()
{
    for(int i=0; i<10; i++){
        for(int j=0; j<10; j++){
            for(int k=0; k<10; k++){
                for(int l=0; l<10; l++){
                    if(i==k && j==l){
                        dp[0][i][j][k][l]=dp[1][i][j][k][l]=0;
                    }else{
                        dp[0][i][j][k][l]=dp[1][i][j][k][l]=INF;
                    }
                }
            }
        }
    }
    int dx[4]={1, -1, 0, 0}, dy[4]={0, 0, 1, -1};
    for(int i=0; i<10; i++){
        for(int j=0; j<10; j++){
            for(int k=0; k<10; k++){
                for(int l=0; l<10; l++){
                    if(i==k && j==l) continue;
                    for(int t=0; t<4; t++){
                        int k1=k+dx[t], l1=l+dy[t];
                        if(k1<0 || k1>=10 || l1<0 || l1>=10) continue;
                        deg[i][j][k1][l1]++;
                    }
                }
            }
        }
    }
    deque<pair<int, pair<P, P>>> que;
    for(int i=0; i<10; i++){
        for(int j=0; j<10; j++){
            que.push_back({1, {{i, j}, {i, j}}});
        }
    }
    for(int i=0; i<10; i++){
        for(int j=0; j<10; j++){
            que.push_back({0, {{i, j}, {i, j}}});
        }
    }
    while(!que.empty()){
        auto p=que.front(); que.pop_front();
        int a=p.second.first.first, b=p.second.first.second, c=p.second.second.first, d=p.second.second.second;
        int t=p.first;
        if(t==1){
            for(int u=0; u<4; u++){
                int a1=a+dx[u], b1=b+dy[u];
                if(a1<0 || a1>=10 || b1<0 || b1>=10) continue;
                if(dp[0][a1][b1][c][d]>dp[1][a][b][c][d]){
                    dp[0][a1][b1][c][d]=dp[1][a][b][c][d];
                    nx[a1][b1][c][d]=P(a, b);
                    que.push_back({0, {{a1, b1}, {c, d}}});
                }
            }
        }else{
            for(int u=0; u<4; u++){
                int c1=c+dx[u], d1=d+dy[u];
                if(c1<0 || c1>=10 || d1<0 || d1>=10) continue;
                deg[a][b][c1][d1]--;
                if(deg[a][b][c1][d1]<=0 && dp[1][a][b][c1][d1]>dp[0][a][b][c][d]+1){
                    dp[1][a][b][c1][d1]=dp[0][a][b][c][d]+1;
                    que.push_front({1, {{a, b}, {c1, d1}}});
                }
            }
        }
    }
    int x1, x2; cin>>x1>>x2;
    auto myon=[&](int x){
        int a=0, b=0;
        while(x%2==0){
            a++;
            x/=2;
        }
        while(x%5==0){
            b++;
            x/=5;
        }
        return P(a, b);
    };
    auto nuo=[&](int a, int b){
        int x=1;
        for(int i=0; i<a; i++) x*=2;
        for(int i=0; i<b; i++) x*=5;
        return x;
    };
    for(int loop=0; loop<35; loop++){
        P p1=myon(x1), p2=myon(x2);
        int a=p1.first, b=p1.second, c=p2.first, d=p2.second;
        P p3=nx[a][b][c][d];
        int x3=nuo(p3.first, p3.second);
        cout<<x3<<endl;
        if(x3==x2) return 0;
        int x4; cin>>x4;
        if(x3==x4) return 0;
        x1=x3, x2=x4;
    }
    /*
    int mx=0;
    for(int i=0; i<10; i++){
        for(int j=0; j<10; j++){
            for(int k=0; k<10; k++){
                for(int l=0; l<10; l++){
                    mx=max(mx, dp[0][i][j][k][l]);
                }
            }
        }
    }
    cout<<mx<<endl;
    */
    assert(0);
    return 0;
}
0