結果
問題 | No.61 リベリオン |
ユーザー | tempura-sama |
提出日時 | 2016-04-14 17:37:10 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,328 bytes |
コンパイル時間 | 624 ms |
コンパイル使用メモリ | 54,880 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-04 08:42:54 |
合計ジャッジ時間 | 1,242 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | WA | - |
testcase_05 | WA | - |
ソースコード
#include <iostream> #include <cstring> using namespace std; #define WH 15 #define CYCLE(x) ((x) * 2) struct Vector2 { int x, y; }; int n; int w, h; int tl; Vector2 mami; Vector2 homu; Vector2 v; inline int gcd(int x, int y) { if ( x == y ) { return x; } if ( x < y ) { return gcd(y, x); } while ( x > y ) { x -= y; } return gcd(y, x); } inline int abs(int x) { return x < 0 ? -x : x; } inline int pos(int p, int m, int l, int t) { p = abs(p + m * t); p = p % CYCLE(l); p = p <= l ? p : CYCLE(l) - p; return p; } int hit_test() { // 時間Dが10^8と多いので時間かかりそうだが、 // 部屋サイズW,Hが15までと狭いので、W*H秒もあれば同じ軌道を飛ぶようになる。 if ( v.x == 0 ) { tl *= abs(v.y); v.y = 1; } else if ( v.y == 0 ) { tl *= abs(v.x); v.x = 1; } else { int g = gcd(abs(v.x), abs(v.y)); tl *= g; v.x /= g; v.y /= g; } for ( int i = 0; i < WH * WH && i < tl; i++ ) { int x = pos(homu.x, v.x, w, i + 1); int y = pos(homu.y, v.y, h, i + 1); if ( x == mami.x && y == mami.y ) { return 1; } } return 0; } int main() { cin >> n; for ( int i = 0; i < n; i++ ) { cin >> w >> h >> tl; cin >> mami.x >> mami.y >> homu.x >> homu.y >> v.x >> v.y; cout << (i + 1) << ":" << (hit_test() ? "Hit" : "Miss") << endl; } return 0; }