• 20181107 模拟赛T1:快乐传递*正确版


    问题描述

    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 想知道他是否能通过这个计划使得所有人都快乐起来呢?

    输入格式

    第一行一个整数 T ≤ 20,表示该测试点数据组数

    每组数据的第一行包含三个整数 n,m,k, 保证至少一类人不为空

    接下来一行第一个整数为 0 ≤ b ≤ n ,表示目前快乐的男生的数量,接下来
    b 个空格隔开的整数 0 ≤ x i < n,表示快乐的男生的编号。

    接下来一行第一个整数为 0 ≤ g ≤ m ,表示目前快乐的女生的数量,接下
    来 g 个空格隔开的整数 0 ≤ y i < m,表示快乐的女生的编号。

    接下来一行第一个整数为 0 ≤ t ≤ k ,表示目前快乐的跨性别者的数量,接
    下来 t 个空格隔开的整数 0 ≤ z i < t,表示快乐的跨性别者的编号。

    相邻两组数据之间有一行空行

    输出格式

    假如最终所有人都能变的快乐起来,就输出”Yes” (不带引号),否则输出”No”.

    样例输入 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
    ");
    		else printf("Yes
    ");
    	}
    	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
    ");
    		else printf("Yes
    ");
    	}
    	
    	fclose(stdin); fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    Docker系列
    Eclipse 安装TestNG插件,结合Maven使用
    HttpClient设置忽略SSL,实现HTTPS访问, 解决Certificates does not conform to algorithm constraints
    Jenkins Html Rport 使用frame报错解决办法
    Zend Framework1 框架入门(针对Windows,包含安装配置与数据库增删改查)
    Windows下Nginx配置SSL实现Https访问(包含证书生成)
    Windows下Nginx Virtual Host多站点配置详解
    幽灵般的存在:零宽空白
    我的公司培训讲义(2):设计模式思想精要教程
    突如其来而又必然的离职
  • 原文地址:https://www.cnblogs.com/Darkpurple/p/9923966.html
Copyright © 2020-2023  润新知