結果
| 問題 |
No.61 リベリオン
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-04-14 17:11:56 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,326 bytes |
| コンパイル時間 | 416 ms |
| コンパイル使用メモリ | 56,928 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-04 08:42:48 |
| 合計ジャッジ時間 | 1,109 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 2 WA * 2 |
ソースコード
#include <iostream>
#include <cstring>
using namespace std;
#define N 10000
#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 <= w ? 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 << (hit_test() ? "Hit" : "Miss") << endl;
}
return 0;
}