結果

問題 No.208 王将
ユーザー ry0u_yd
提出日時 2015-09-05 20:05:16
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 1,000 ms
コード長 3,092 bytes
コンパイル時間 747 ms
コンパイル使用メモリ 72,788 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-10-09 16:27:07
合計ジャッジ時間 1,564 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 23
権限があれば一括ダウンロードができます

ソースコード

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

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <sstream>
#include <map>
#include <set>
#include <cmath>
#define REP(i,k,n) for(int i=k;i<n;i++)
#define rep(i,n) for(int i=0;i<n;i++)
#define INF 1<<30
#define pb push_back
#define mp make_pair
#define EPS 1e-8
#define equals(a,b) fabs((a) - (b)) < EPS
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
struct Point {
double x, y;
Point(double x=0, double y=0) : x(x), y(y) {}
Point operator+(const Point &o) const { return Point(x+o.x, y+o.y); }
Point operator-(const Point &o) const { return Point(x-o.x, y-o.y); }
Point operator*(const double m) const { return Point(x*m, y*m); }
Point operator/(const double d) const { return Point(x/d, y/d); }
bool operator<(const Point &o) const { return x != o.x ? x < o.x : y < o.y; }
bool operator==(const Point &o) const { return fabs(x-o.x) < EPS && fabs(y-o.y) < EPS; }
double cross(const Point &o) const { return x * o.y - y * o.x; }
double dot(const Point &o) const { return x * o.x + y * o.y; }
double atan() const { return atan2(y, x); }
double norm() const { return sqrt(dot(*this)); }
double distance(const Point &o) const { return (o - (*this)).norm(); }
double area(const Point &a,const Point &b) {
Point p = a - (*this), p2 = b - (*this);
return p.cross(p2);
}
double area_abs(const Point &a,const Point &b) const {
Point p = a - (*this), p2 = b - (*this);
return fabs(p.cross(p2)) / 2.0;
}
//ab
int between(const Point &a,const Point &b) {
if(area(a,b) != 0) return 0;
if(a.x != b.x) return ((a.x <= x) && (x <= b.x) || (a.x >= x) && (x >= b.x));
else return ((a.y <= y) && (y <= b.y) || (a.y >= y) && (y >= b.y));
}
double distance_seg(const Point& a,const Point& b) {
if((b-a).dot(*this-a) < EPS) {
return (*this-a).norm();
}
if((a-b).dot(*this-b) < EPS) {
return (*this-b).norm();
}
return abs((b-a).cross(*this-a)) / (b-a).norm();
}
bool hitPolygon(const Point& a,const Point& b,const Point& c) {
double t = (b-a).cross(*this-b);
double t2 = (c-b).cross(*this-c);
double t3 = (a-c).cross(*this-a);
if((t > 0 && t2 > 0 && t3 > 0) || ( t < 0 && t2 < 0 && t3 < 0)) {
return true;
}
return false;
}
};
int main() {
int x,y,x2,y2;
cin >> x >> y >> x2 >> y2;
Point p(0,0), s(x,y), t(x2,y2);
if(x == 0) {
cout << abs(y) << endl;
} else if(y == 0) {
cout << abs(x) << endl;
}
else if(abs(x) == abs(y)) {
int ans = abs(x);
if(t.between(p,s)) {
ans += 1;
}
cout << ans << endl;
} else {
int ans = 0;
ans += min(abs(x),abs(y));
ans += max(abs(x),abs(y)) - min(abs(x),abs(y));
cout << ans << endl;
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0