結果
| 問題 | No.325 マンハッタン距離2 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-03-05 13:39:19 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 955 bytes |
| コンパイル時間 | 541 ms |
| コンパイル使用メモリ | 67,872 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-14 01:13:29 |
| 合計ジャッジ時間 | 1,322 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
コンパイルメッセージ
main.cpp:40:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
40 | main()
| ^~~~
ソースコード
#include<iostream>
#include<algorithm>
using namespace std;
long d;
long f(long x1,long y1,long x2,long y2)
{
if(x2<x1||y2<y1)return 0;
if(d<abs(x1)+abs(y1))return 0;
else if(d<min(abs(x1)+abs(y2),abs(x2)+abs(y1)))
{
long t=d-abs(x1)-abs(y1)+1;
return t*(t+1)/2;
}
else if(d<max(abs(x1)+abs(y2),abs(x2)+abs(y1)))
{
long L=abs(x1)+abs(y2),R=abs(x2)+abs(y1);
if(L<R)
{
long t=L-abs(x1)-abs(y1);
long u=d-L+1;
return t*(t+1)/2+u*(y2-y1+1);
}
else
{
long t=R-abs(x1)-abs(y1);
long u=d-R+1;
return t*(t+1)/2+u*(x2-x1+1);
}
}
else if(d<abs(x2)+abs(y2))
{
long t=abs(x2)+abs(y2)-d;
return (x2-x1+1)*(y2-y1+1)-t*(t+1)/2;
}
else
{
return (x2-x1+1)*(y2-y1+1);
}
}
main()
{
long x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2>>d;
long ans=0;
for(int r=0;r<4;r++)
{
ans+=f(max(x1,1L),max(y1,0L),x2,y2);
long tmp=x1;
x1=y1;
y1=-x2;
x2=y2;
y2=-tmp;
}
if(x1<=0&&0<=x2&&y1<=0&&0<=y2)ans++;
cout<<ans<<endl;
}