結果
問題 | No.62 リベリオン(Extra) |
ユーザー | EmKjp |
提出日時 | 2015-03-21 17:27:43 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,012 bytes |
コンパイル時間 | 894 ms |
コンパイル使用メモリ | 85,028 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-28 23:56:23 |
合計ジャッジ時間 | 1,271 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 19 ms
5,376 KB |
testcase_03 | AC | 18 ms
5,376 KB |
testcase_04 | WA | - |
コンパイルメッセージ
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; d *= g; VI X = { mx, mx, 2 * w - mx, 2 * w - mx }; VI Y = { my, 2 * h - my, 2 * h - my, my }; bool ok = false; FOR(k,4){ long long w2 = w * 2; long long h2 = h * 2; // vx * t == x - hx (mod w2) // vy * t == y - hy (mod h2) 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; }