結果
| 問題 |
No.849 yuki国の分割統治
|
| コンテスト | |
| ユーザー |
LayCurse
|
| 提出日時 | 2019-07-05 23:05:51 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,344 bytes |
| コンパイル時間 | 2,339 ms |
| コンパイル使用メモリ | 197,604 KB |
| 最終ジャッジ日時 | 2025-01-07 06:07:38 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 23 WA * 3 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
void *wmem;
template<class T1, class T2> void sortA_L(int N, T1 a[], T2 b[], void *mem = wmem){
int i;
pair<T1, T2> *arr=(pair<T1, T2> *) mem;
for(i=0;i<N;i++){
arr[i].first = a[i];
arr[i].second = b[i];
}
sort(arr, arr+N);
for(i=0;i<N;i++){
a[i] = arr[i].first;
b[i] = arr[i].second;
}
}
inline void rd(long long &x){
int k, m=0;
x=0;
for(;;){
k = getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
inline void wt_L(char a){
putchar_unlocked(a);
}
inline void wt_L(int x){
char f[10];
int m=0, s=0;
if(x<0){
m=1;
x=-x;
}
while(x){
f[s++]=x%10;
x/=10;
}
if(!s){
f[s++]=0;
}
if(m){
putchar_unlocked('-');
}
while(s--){
putchar_unlocked(f[s]+'0');
}
}
template<class T> inline T GCD_L(T a,T b){
T r;
while(a){
r=b;
b=a;
a=r%a;
}
return b;
}
char memarr[96000000];
long long A;
long long B;
long long C;
long long D;
long long N;
long long X[100000];
long long Y[100000];
long long xy[100000];
int sz;
int main(){
int i, j, k, res=0;
long long d, xx, yy;
wmem = memarr;
rd(A);
rd(B);
rd(C);
rd(D);
rd(N);
{
int Lj4PdHRW;
for(Lj4PdHRW=0;Lj4PdHRW<N;Lj4PdHRW++){
rd(X[Lj4PdHRW]);
rd(Y[Lj4PdHRW]);
}
}
if( A*D - B*C == 0 ){
if(A==C && C==0){
i =GCD_L(B, D);
A = 0;
B = i;
}
else{
i =GCD_L(A, C);
A = i;
B = B * i / A;
}
for(k=0;k<N;k++){
if(A){
i = X[k] / A;
X[k] -= A * i;
Y[k] -= B * i;
}
else{
i = Y[k] / B;
X[k] -= A * i;
Y[k] -= B * i;
}
}
}
else{
d = A*D - B*C;
if(d < 0){
d = -d;
}
for(k=0;k<N;k++){
xx = X[k];
yy = Y[k];
X[k] = (xx * D - yy * C) % d;
Y[k] = (yy * A - xx * B) % d;
if(X[k] < 0){
X[k] += d;
}
if(Y[k] < 0){
Y[k] += d;
}
}
}
sortA_L(N, X, Y);
for(i=0;i<N;i++){
if(i==0 || X[i]!=X[i-1] || Y[i]!=Y[i-1]){
res++;
}
}
wt_L(res);
wt_L('\n');
return 0;
}
// cLay varsion 20190630-1
// --- original code ---
// ll A, B, C, D, N, X[1d5], Y[1d5];
//
// ll xy[1d5]; int sz;
// {
// int i, j, k;
// ll d, xx, yy;
// int res = 0;
// rd(A,B,C,D,N,(X,Y)(N));
//
// if( A*D - B*C == 0 ){
// if(A==C==0){
// i = gcd(B, D);
// A = 0;
// B = i;
// } else {
// i = gcd(A, C);
// A = i;
// B = B * i / A;
// }
//
// rep(k,N){
// if(A){
// i = X[k] / A;
// X[k] -= A * i;
// Y[k] -= B * i;
// } else {
// i = Y[k] / B;
// X[k] -= A * i;
// Y[k] -= B * i;
// }
// }
// } else {
// d = A*D - B*C;
// if(d < 0) d = -d;
// rep(k,N){
// xx = X[k];
// yy = Y[k];
// X[k] = (xx * D - yy * C) % d;
// Y[k] = (yy * A - xx * B) % d;
// if(X[k] < 0) X[k] += d;
// if(Y[k] < 0) Y[k] += d;
// }
// }
//
// sortA(N, X, Y);
// rep(i,N) if(i==0 || X[i]!=X[i-1] || Y[i]!=Y[i-1]) res++;
// wt(res);
// }
LayCurse