提出 #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 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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 |