• Codeforces 1166E(思维)


    题面

    有一个长度为n的序列a,有m次操作。每一次操作一个人选a的一个子集x,另一个人会选x的补集y.且x集合中的数的最小公倍数比y集合中的数的最小公倍数大。现在给出所有x,判断是否有一个序列a满足条件。

    分析

    考虑不满足条件的情况:假如子集(x_i)(x_j)完全不相交,会出现矛盾

    因为(gcd(x_i)>gcd(a-x_i),gcd(x_j)>gcd(a-x_j)),我们又知道(x_j=a-x_i),因此上式可以化为(gcd(x_i)>gcd(x_j),gcd(x_j)>gcd(x,y)),矛盾

    代码

    #include<iostream>
    #include<cstdio>
    #define maxm 55
    #define maxn 10005
    using namespace std;
    int m,n;
    int a[maxm][maxn];
    int main() {
    	int sz,x;
    	scanf("%d %d",&m,&n);
    	for(int i=1; i<=m; i++) {
    		scanf("%d",&sz);
    		for(int j=1; j<=sz; j++) {
    			scanf("%d",&x);
    			a[i][x]=1;
    		}
    	}
    	for(int i=1; i<=m; i++) {
    		for(int j=1; j<=m; j++) {
    			bool flag=true;
    			for(int k=1; k<=n; k++) {
    				if(a[i][k]==1&&a[j][k]==1) {
    					flag=false;
    				}
    			}
    			if(flag) {
    				printf("impossible
    ");
    				return 0;
    			}
    		}
    	}
    	printf("possible");
    }
    
    
  • 相关阅读:
    [HNOI2004]L语言
    快速沃尔什变换FWT
    [BZOJ1486][HNOI2009]最小圈
    [BZOJ4819][SDOI2017]新生舞会
    [POJ2976]Dropping tests
    CTSC2018&APIO2018游记
    [Luogu3769][CH弱省胡策R2]TATT
    [BZOJ3489]A simple rmq problem
    [BZOJ4066]简单题
    [BZOJ2648]SJY摆棋子
  • 原文地址:https://www.cnblogs.com/birchtree/p/10888275.html
Copyright © 2020-2023  润新知