結果

問題 No.849 yuki国の分割統治
ユーザー beet
提出日時 2019-07-07 17:22:36
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 115 ms / 2,000 ms
コード長 938 bytes
コンパイル時間 1,771 ms
コンパイル使用メモリ 200,944 KB
最終ジャッジ日時 2025-01-07 06:27:18
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
using Int = long long;
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}

//INSERT ABOVE HERE
signed main(){
  Int a,b,c,d;
  cin>>a>>b>>c>>d;
  Int n;
  cin>>n;
  vector<Int> xs(n),ys(n);
  for(Int i=0;i<n;i++) cin>>xs[i]>>ys[i];

  if(a*d-b*c==0){
    Int dx=__gcd(a,c);
    Int dy=__gcd(b,d);

    using P = pair<Int, Int>;
    set<P> sp;
    if(dx==0){
      for(Int i=0;i<n;i++)
        sp.emplace(xs[i]-(ys[i]/dy)*dx,ys[i]%dy);
    }else{
      for(Int i=0;i<n;i++)
        sp.emplace(xs[i]%dx,ys[i]-(xs[i]/dx)*dy);
    }
    cout<<sp.size()<<endl;
    return 0;
  }

  Int m=abs(a*d-b*c);
  using P = pair<Int, Int>;
  set<P> sp;
  for(Int i=0;i<n;i++)
    sp.emplace(((+d*xs[i]-c*ys[i])%m+m)%m,
               ((-b*xs[i]+a*ys[i])%m+m)%m);

  cout<<sp.size()<<endl;
  return 0;
}
0