提出 #32973579


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define MOD 1000000007
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
#define per(i,a,n) for (ll i=n;i-->(ll)a;)
#define pb push_back

ll read(){ll r;scanf("%lld",&r);return r;} // read

ll b;
ll k;

const int T_NORMAL = 0; // 普通
const int T_SIDE = 1; // 边
const int T_CROSS = 2; // 角

int calctype(ll i,ll j){
  return (int)(i%b == 0) + (int)(j%b == 0);
}

vector<array<ll,3> > calc(ll i,ll j){  // i , j , dis
  vector<ll> ai = {i};
  vector<ll> aj = {j};
  if(i%b) {
    ai.pb((i/b)*b);
    ai.pb((i/b+1)*b);
  }
  if(j%b) {
    aj.pb((j/b)*b);
    aj.pb((j/b+1)*b);
  }
  vector<array<ll,3> > res;
  for(auto ni:ai){
    for(auto nj:aj){
      if(ni != i && nj != j){
        res.pb({ni,nj, (abs(ni-i) + abs(nj-j) - max(abs(ni-i), abs(nj-j)))*k + max(abs(ni-i), abs(nj-j)) });
      }else{
        if(i % b != 0 && j%b != 0){
          res.pb({ni,nj, (abs(ni-i) + abs(nj-j))*k});
        }else{
          res.pb({ni,nj, (abs(ni-i) + abs(nj-j))});
        }
      }
    }
  }
  return res;
}

void w(){
  b = read();
  k = read();
  ll si = read();
  ll sj = read();
  ll gi = read();
  ll gj = read();
  auto ijds = calc(si,sj);
  auto ijdg = calc(gi,gj);
  ll ans = 0x3f3f3f3f3f3f3f3f;

  for(auto [i0,j0,d0]:ijds){
    int t0 = calctype(i0,j0);
    for(auto [i1,j1,d1]:ijdg){
      int t1 = calctype(i1,j1);
      if(t0 == T_NORMAL || t1 == T_NORMAL){
        ans = min(ans,d0+d1+ (abs(i1-i0) + abs(j1-j0))*k);
      }else if(t0 == T_SIDE || t1 == T_SIDE){
        if(i0 == i1 && i0 % b == 0){
          ans = min(ans,d0+d1+abs(j1-j0));
        }else if(j0 == j1 && j0 % b == 0){
          ans = min(ans,d0+d1+abs(i1-i0));
        }else{
          ans = min(ans,d0+d1+(abs(i1-i0)+abs(j1-j0))*k);
        }
      }else{ // == CROSS
        ans = min(ans,d0+d1+abs(i1-i0)+abs(j1-j0));
      }
    }
  }
  printf("%lld\n",ans);
}

int main(){
  int t = read();
  while(t--) w();
  return 0;
}

提出情報

提出日時
問題 F - Main Street
ユーザ cromarmot
言語 C++ (GCC 9.2.1)
得点 500
コード長 1971 Byte
結果 AC
実行時間 625 ms
メモリ 4076 KiB

コンパイルエラー

./Main.cpp: In function ‘ll read()’:
./Main.cpp:10:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   10 | ll read(){ll r;scanf("%lld",&r);return r;} // read
      |                ~~~~~^~~~~~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 2
AC × 24
セット名 テストケース
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 8 ms 3752 KiB
example_01.txt AC 2 ms 3784 KiB
test_00.txt AC 625 ms 4076 KiB
test_01.txt AC 523 ms 3640 KiB
test_02.txt AC 480 ms 3676 KiB
test_03.txt AC 463 ms 3724 KiB
test_04.txt AC 606 ms 3724 KiB
test_05.txt AC 541 ms 3780 KiB
test_06.txt AC 539 ms 3620 KiB
test_07.txt AC 585 ms 3732 KiB
test_08.txt AC 261 ms 3776 KiB
test_09.txt AC 270 ms 3940 KiB
test_10.txt AC 296 ms 3992 KiB
test_11.txt AC 255 ms 3732 KiB
test_12.txt AC 266 ms 3648 KiB
test_13.txt AC 169 ms 3744 KiB
test_14.txt AC 355 ms 3676 KiB
test_15.txt AC 354 ms 3672 KiB
test_16.txt AC 353 ms 3640 KiB
test_17.txt AC 354 ms 3600 KiB
test_18.txt AC 354 ms 3652 KiB
test_19.txt AC 365 ms 3680 KiB
test_20.txt AC 365 ms 3724 KiB
test_21.txt AC 380 ms 3680 KiB