David 有不少好朋友。有些期末季剛結束,有些人很快樂,但有些不太快樂,David 想把快樂傳遞給每一個人,做爲心理學大師,他準備了以下計劃:David 的朋友中有 n 個男生和 m 個女生, 還有 k 個跨性別者,方便起見,將他們分別編號爲 0,...,n−1 和 0,...,m−1, 0,...,k −1,在第 i 天,David會邀請編號爲 (i mod n) 的男生和編號爲 (i mod m) 的女生還有 (i mod k)的跨性別者共進晚餐(由於 David 同時是程序員,因此從這個計劃從第 0天開始) 。共進晚餐的三我的只要至少有有一個是快樂的人,另外的人也會變得快樂起來。不然你們的狀態不會改變(一旦一我的是快樂的,他就會永遠快樂下去) 。如今問題來了,David 想知道他是否能經過這個計劃使得全部人都快樂起來呢?ios
輸入格式程序員
第一行一個整數 T ≤ 20,表示該測試點數據組數數組
每組數據的第一行包含三個整數 n,m,k, 保證至少一類人不爲空。app
接下來一行第一個整數爲 0 ≤ b ≤ n ,表示目前快樂的男生的數量,接下來
b 個空格隔開的整數 0 ≤ x i < n,表示快樂的男生的編號。測試
接下來一行第一個整數爲 0 ≤ g ≤ m ,表示目前快樂的女生的數量,接下
來 g 個空格隔開的整數 0 ≤ y i < m,表示快樂的女生的編號。spa
接下來一行第一個整數爲 0 ≤ t ≤ k ,表示目前快樂的跨性別者的數量,接
下來 t 個空格隔開的整數 0 ≤ z i < t,表示快樂的跨性別者的編號。code
相鄰兩組數據之間有一行空行get
輸出格式string
假如最終全部人都能變的快樂起來,就輸出」Yes」 (不帶引號),不然輸出」No」.it
樣例輸入 1
3
2 3 0
0
1 0
0
2 4 0
1 0
1 2
0
2 3 0
1 0
1 1
0
樣例輸出 1
Yes
No
Yes
樣例解釋
對於第一組數據:
第 0 天,0 號男生和 0 號女生吃飯,由於 0 號女生是快樂的,因此 0 號男
生也變得快樂了;
第 1 天,1 號男生和 1 號女生吃飯,由於他們原本就都不快樂,狀況沒有變
化;
第 2 天,0 號男生和 2 號女生吃飯,由於 0 號男生是快樂的,因此 2 號女
生也變得快樂了;
第 3 天,1 號男生和 0 號女生吃飯,由於 0 號女生是快樂的,因此 1 號男
生也變得快樂了;
第 4 天,0 號男生和 1 號女生吃飯,由於 0 號男生是快樂的,因此 1 號女
生也變得快樂了;
這樣就全都快樂了
對於第二組數據:1 號男生,1 號女生和 3 號女生永遠也無法變得快樂
數據範圍及約定
對於 50% 的數據,n,m ≤ 100,k = 0
對於 70% 的數據, n,m,k ≤ 2000
另外存在 10% 的數據, n,m ≤ 1000000000, b,g ≤ 100000,k = 0
對於 100% 的數據,n,m,k ≤ 1000000000, b,g,t ≤ 100000
// 70 fen baoli /* QAQ 這個70的baoli調了1h...而後就看見千古神犇 axm dalao的正解都寫完了QAQ,在寫暴力 對拍,我好慌,偶然一撇看到了他把它們放到了一個數組裏,因而我也把他們放到一個 數組裏,搞了很久一直不對。。放棄之際,決定再掙扎一下,而後..就調出來了,,但 是寫完第一題心態爆炸. (PS:你們可不要學我沒事亂看哦QAQ) */ #include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<queue> #include<algorithm> using namespace std; typedef long long ll; using namespace std; const int N=1e6+10; inline int read() { int n=0,f=1;char ch=getchar(); while (ch<'0' || ch>'9') {if(ch=='-') f=-1;ch=getchar();} while (ch<='9' && ch>='0') {n=(n<<3)+(n<<1)+ch-'0';ch=getchar();} return n*f; } inline void init() { freopen("happy2.in","r",stdin); freopen("happy2.out","w",stdout); } int x[N],y[N],z[N]; int T,n,m,k,b,a,c; int main() { init(); T=read(); while (T--) { n=read(),m=read(),k=read(); memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); memset(z,0,sizeof(z)); int aa=read(); for(int i=1;i<=aa;++i) a=read(),x[a]=1; int ba=read(); for(int i=1;i<=ba;++i) b=read(),y[b]=1; int ca=read(); for(int i=1;i<=ca;++i) c=read(),z[c]=1; if(k) { for(int i=0;i<=100000;++i) if(y[i%m] || x[i%n] || z[i%k]) y[i%m]=x[i%n]=z[i%k]=1; } else { for(int i=0;i<=100000;++i) if(y[i%m] || x[i%n]) y[i%m]=x[i%n]=1; } int bz=1; for(int i=0;i<n;++i) if(!x[i]) bz=0; for(int i=0;i<m;++i) if(!y[i]) bz=0; for(int i=0;i<k;++i) if(!z[i]) bz=0; if(bz==0) printf("No\n"); else printf("Yes\n"); } return 0; }
std:
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<queue> #include<algorithm> using namespace std; typedef long long ll; using namespace std; const long long inf=947483648; const int N=1e5+10; ll T,n,m,k; ll a[N],b[N],cc[N],vis[N]; inline ll read() { ll n=0,f=1;char ch=getchar(); while (ch<'0' || ch>'9') {if(ch=='-') f=-1;ch=getchar();} while (ch<='9' && ch>='0') {n=(n<<3)+(n<<1)+ch-'0';ch=getchar();} return n*f; } inline ll gcd(ll a,ll b) { if(b==0) return a; else return gcd(b,a%b); } inline void init() { freopen("happy2.in","r",stdin); freopen("happy2.out","w",stdout); } int main() { init(); T=read(); while (T--) { memset(vis,0,sizeof(vis)); n=read(),m=read(),k=read(); ll jc=gcd(gcd(n,m),k); ll a1,b1,c1; a1=read(); for(ll i=0;i<a1;++i) vis[read()%jc]=1; b1=read(); for(ll i=0;i<b1;++i) vis[read()%jc]=1; c1=read(); for(ll i=0;i<c1;++i) vis[read()%jc]=1; ll c=1; for(ll i=0;i<jc;++i) if(!vis[i]) { c=0; break; } if(!c || a1+b1+c1==0) printf("No\n"); else printf("Yes\n"); } fclose(stdin); fclose(stdout); return 0; }