QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#756969 | #5141. Identical Parity | frankly6 | WA | 0ms | 3560kb | C++17 | 1.6kb | 2024-11-16 23:06:03 | 2024-11-16 23:06:04 |
Judging History
answer
#include<iostream>
#include<cstdio>
using namespace std;
const int MX=100050;
int T, N, K;
int read()
{
int r=0, f=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') {r=r*10+ch-'0'; ch=getchar();}
return r*f;
}
int exgcd(int a, int b, int &x, int &y)
{
if(b==0){x=1, y=0; return a;}
else{int tmp; int d=exgcd(b,a%b,tmp,x); y=tmp-a/b*x; return d;}
}
int main()
{
// freopen("testdata.in","r",stdin);
T=read();
while(T--)
{
N=read(), K=read();
if(K%2==0||N==1) cout << "Yes\n";
else
{
int tx, ty;
int a=N/K+1, b=N/K, c=N/2;
int la=N%K, lb=K-N%K;
int d=exgcd(a,b,tx,ty);
if(c%d) {cout << "No\n"; continue;}
a/=d; b/=d; c/=d;
// cout << "a=" << a << ", b=" << b << ", c=" << c << ", x=" << tx << ", y=" << ty << '\n';
int L1=-tx*a, R1=(N%K-tx)*a, L2=(N%K+ty-K)*b, R2=ty*b;
// cout << "L1=" << L1 << ", R1=" << R1 << ", L2=" << L2 << ", R2=" << R2 << '\n';
if(L1>R2||R1<L2) {cout << "No\n"; continue;}
if(R1-L1<a*b&&R1/a/b==L1/a/b) {cout << "No\n"; continue;}
if(R2-L2<a*b&&R2/a/b==L2/a/b) {cout << "No\n"; continue;}
if(R1>R2&&R2/a/b!=L1/a/b) cout << "Yes\n";
else if(R1/a/b!=L2/a/b) cout << "Yes\n";
else cout << "No\n";
}
}
return (0-0);
}
/*
n/k full length k parts
n-n/k :(n/k+1 same parity)
k-(n-n/k) :(n/k same parity)
n/2 : even
n-n/2 : odd
\det <= 1
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3560kb
input:
3 3 1 4 2 5 3
output:
No Yes No
result:
wrong answer expected YES, found NO [3rd token]