結果
問題 | No.208 王将 |
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
#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)) < EPSusing 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;}