結果
問題 | No.62 リベリオン(Extra) |
ユーザー |
![]() |
提出日時 | 2015-03-21 17:30:53 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 60 ms / 5,000 ms |
コード長 | 2,990 bytes |
コンパイル時間 | 678 ms |
コンパイル使用メモリ | 84,808 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-28 23:56:26 |
合計ジャッジ時間 | 1,199 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 3 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:101:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 101 | scanf("%d%d%d%d%d%d%d%d%d", &w,&h,&_d,&mx,&my,&hx,&hy,&vx,&vy); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<iostream>#include<sstream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<vector>#include<cmath>#include<set>#include<map>#include<stack>#include<queue>#include<numeric>#include<functional>#include<complex>using namespace std;#define BET(a,b,c) ((a)<=(b)&&(b)<(c))#define FOR(i,n) for(int i=0,i##_end=(int(n));i<i##_end;i++)#define SZ(x) (int)(x.size())#define ALL(x) (x).begin(),(x).end()#define MP make_pair#define FOR_EACH(it,v) for(__typeof(v.begin()) it=v.begin(),it_end=v.end() ; it != it_end ; it++)typedef vector<int> VI;typedef vector<VI> VVI;typedef long long ll_t;long long gcd (long long s , long long t) { return t ? gcd(t,s%t) : s ; }ll_t exgcd(ll_t a, ll_t b, ll_t &x, ll_t &y){if(b == 0) {x = 1; y = 0;return a;} else {ll_t d = exgcd(b, a % b, y, x);y -= a / b * x;return d;}}ll_t inv(ll_t a, ll_t mod) {ll_t x, y;if (exgcd(a, mod, x, y) == 1){return (x + mod) % mod;}else {return -1;}}bool modular(ll_t a1, ll_t m1 , ll_t a2 , ll_t m2 ,ll_t &val , ll_t& mod){a1 %= m1 ; a2 %= m2;if(a1>a2) return modular(a2,m2,a1,m1,val,mod);ll_t A,B,g = exgcd(m1,m2,A,B);if(a1%g != a2%g) return false;ll_t M = a1%g ;a1/=g ; m1/=g; a2/=g ; m2/=g;ll_t k = (A+m2)*(a2-a1)%m2;mod = m1*m2*g;val = ((a1+k*m1)*g+M) % mod;return true;}ll_t regular_mod(ll_t x , ll_t mod){if(x>=0) return x % mod;return (mod - regular_mod(-x , mod)) % mod;}bool calc(ll_t v, ll_t x, ll_t m, ll_t& rx, ll_t &rmod){v = regular_mod(v, m);x = regular_mod(x, m);// v * t = x (mod m)// t = x * inv(v) (mod m)ll_t g = gcd(v, m);if(g > 1){if(x % g) return false;v /= g;m /= g;x /= g;}rx = regular_mod(x * inv(v, m), m);rmod = m;if(rx == -1) return false;//cout<<"! "<<rx * VV % MM<<" "<<x<<" "<<rmod<<endl;return true;}int main(){int q;cin>>q;FOR(i,q){int w,h,_d,mx,my,hx,hy,vx,vy;scanf("%d%d%d%d%d%d%d%d%d", &w,&h,&_d,&mx,&my,&hx,&hy,&vx,&vy);ll_t g = gcd(abs(vx), abs(vy));vx /= g;vy /= g;long long D = 1LL * _d * g;vector<long long> X = { mx, mx, 2LL * w - mx, 2LL * w - mx };vector<long long> Y = { my, 2LL * h - my, 2LL * h - my, my };bool ok = false;FOR(k,4){long long w2 = w * 2;long long h2 = h * 2;long long x = X[k];long long y = Y[k];long long tx, ty;if(!calc(vx, x - hx, w2, tx, w2)) continue;if(!calc(vy, y - hy, h2, ty, h2)) continue;long long val, mod;if(modular(tx, w2, ty, h2, val, mod)){if(val <= D){ok = true;break;}}}puts(ok?"Hit":"Miss");}return 0;}