結果
| 問題 |
No.635 自然門松列
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-06-01 17:18:33 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
CE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 2,098 bytes |
| コンパイル時間 | 753 ms |
| コンパイル使用メモリ | 61,088 KB |
| 最終ジャッジ日時 | 2024-11-14 20:25:33 |
| 合計ジャッジ時間 | 1,317 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
main.cpp: In function ‘bool Equal(double, double)’:
main.cpp:24:16: error: ‘fabs’ was not declared in this scope; did you mean ‘labs’?
24 | return fabs(a - b) < 0.000001;
| ^~~~
| labs
ソースコード
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct Pine {
int x[3];
int y[3];
};
inline int Max(int arr[]) {
return distance(arr, max_element(arr, arr + 3));
}
inline int Min(int arr[]) {
return distance(arr, min_element(arr, arr + 3));
}
inline bool Equal(double a, double b) {
return fabs(a - b) < 0.000001;
}
int main() {
int n;
cin >> n;
vector<Pine> pines;
for (int i = 0; i < n; i++) {
Pine p;
cin>> p.x[0] >> p.x[1] >> p.x[2] >> p.y[0] >> p.y[1] >> p.y[2];
pines.emplace_back(p);
}
for (Pine p : pines) {
// 真ん中が最大か最小
if (p.x[0] != p.x[1] && p.x[1] != p.x[2] && p.x[0] != p.x[2]) {
if (Max(p.x) == 1 || Min(p.x) == 1) {
cout << "YES" << endl;
continue;
}
}
// 真ん中と左右どちらかが同じ値かつ増加量も同じ
if ((p.x[0] == p.x[1] && p.y[0] == p.y[1]) || (p.x[1] == p.x[2] && p.y[1] == p.y[2]) || (p.x[0] == p.x[2] && p.y[0] == p.y[2])) {
cout << "NO" << endl;
continue;
}
// 値がすべて一致するタイミングで左右の大小が入れ替わる
double n1 = static_cast<double>(p.x[0] - p.x[1]) / (p.y[1] - p.y[0]);
double n2 = static_cast<double>(p.x[1] - p.x[2]) / (p.y[2] - p.y[1]);
if (Equal(n1, n2)) {
cout << "NO" << endl;
continue;
}
bool gt = p.x[0] > p.x[2];
// 真ん中と左右どちらかの値が同じ場合
if (p.x[0] == p.x[1] || p.x[1] == p.x[2]){
if (p.x[0] > p.x[2] && p.y[0] > p.y[2]) {
gt = true;
}
else if (p.x[0] < p.x[2] && p.y[0] < p.y[2]) {
gt = false;
}
}
else if (p.x[0] == p.x[2]) {
gt = p.y[0] < p.y[2];
}
int step = 2020;
p.x[0] += p.y[0] * step;
p.x[1] += p.y[1] * step;
p.x[2] += p.y[2] * step;
// 門松列になった
if (Max(p.x) == 1 || Min(p.x) == 1) {
cout << "YES" << endl;
continue;
}
// 左右の大小が入れ替わらなかった
if (gt == (p.x[0] > p.x[2])) {
cout << "NO" << endl;
}
// 左右の大小が入れ替わった
else {
cout << "YES" << endl;
}
}
return 0;
}