結果
| 問題 | No.61 リベリオン |
| コンテスト | |
| ユーザー |
btk
|
| 提出日時 | 2015-06-20 14:00:18 |
| 言語 | C++11(old_compat) (gcc 12.4.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 59 ms / 5,000 ms |
| コード長 | 2,355 bytes |
| 記録 | |
| コンパイル時間 | 1,366 ms |
| コンパイル使用メモリ | 169,048 KB |
| 実行使用メモリ | 7,840 KB |
| 最終ジャッジ日時 | 2026-03-08 16:02:47 |
| 合計ジャッジ時間 | 1,776 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 4 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:81:25: warning: ‘t’ may be used uninitialized [-Wmaybe-uninitialized]
81 | if (t <= d)cout << "Hit" << endl;
| ^~
main.cpp:70:32: note: ‘t’ was declared here
70 | double t;
| ^
main.cpp:61:25: warning: ‘t’ may be used uninitialized [-Wmaybe-uninitialized]
61 | if (t <= d)cout << "Hit" << endl;
| ^~
main.cpp:51:32: note: ‘t’ was declared here
51 | double t;
| ^
ソースコード
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
const double eps = 1e-7;
double dist(double t, double v, double h){
double d = abs(v)*t;
double k = d / (h * 2);
k = round(k);
return round(d - k * 2 * h);
}
double pos(double t, int v, double h,double hy){
double dd = dist(t, v, h);
if (dd >= h){
dd -= h;
hy = h - hy;
v = -v;
}
if (v < 0)dd = -dd;
hy += dd;
if (hy >= h){
hy = h - (hy - h);
}
else if (hy <= 0){
hy = -hy;
}
return hy;
}
int main(){
/*
ifstream cin("in.txt");
ofstream cout("out.txt");
//*/
int Q;
cin >> Q;
while (Q--){
int w, h, d, mx, my, hx, hy, vx, vy;
cin >> w >> h >> d >> mx >> my >> hx >> hy >> vx >> vy;
d = min(d, 4 * h*w);
if (vy == 0){
//tmp
if (my != hy){
cout << "Miss" << endl;
continue;
}
double t;
if ((mx - hx > 0 && vx > 0) || (mx - hx < 0 || vx < 0)){
t = (mx - hx) / (double)vx;
}
else if (mx - hx<0 && vx>0){
t = (w - hx + w - mx) / (double)abs(vx);
}
else if (mx - hx>0 && vx < 0){
t = (hx + mx) / (double)abs(vx);
}
if (t <= d)cout << "Hit" << endl;
else cout << "Miss" << endl;
continue;
}
if (vx == 0){
if (mx != hx){
cout << "Miss" << endl; continue;
}
double t;
if ((my - hy > 0 && vy > 0) || (my - hy < 0 || vy < 0)){
t = (my - hy) / (double)vy;
}
else if (my - hy<0 && vy>0){
t = (h - hy + h - my) / (double)abs(vy);
}
else if (my - hy>0 && vy < 0){
t = (hy + my) / (double)abs(vy);
}
if (t <= d)cout << "Hit" << endl;
else cout << "Miss" << endl;
continue;
}
double t;
if ((mx - hx > 0 && vx > 0) || (mx - hx < 0 && vx < 0)){
t = (mx - hx) / (double)vx;
}
else if (mx - hx<0 && vx>0){
t = (w - hx + w - mx) / (double)abs(vx);
vx = -vx;
}
else if (mx - hx>0 && vx < 0){
t = (hx + mx) / (double)abs(vx);
vx = -vx;
}
else t = 0;
bool flag = false;
while (t<=d){
if (abs(round(abs(t*vy)) - abs(t*vy)) < eps){
// cout << t*vy << endl;
if (abs(pos(t, vy, h, hy) - my) < eps){
flag = true;
// cout << t << endl;
break;
}
}
if (vx>0){
t += abs(w - mx)*2.0 / abs(vx);
}
else t += abs(mx)*2.0 / abs(vx);
vx *= -1;
}
if (flag)cout << "Hit" << endl;
else cout << "Miss" << endl;
}
/*
cin.close();
cout.close();
//*/
return 0;
}
btk