結果

問題 No.325 マンハッタン距離2
ユーザー kotatsugame
提出日時 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()
      | ^~~~

ソースコード

diff #
プレゼンテーションモードにする

#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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0