地址:https://codeforces.com/contest/1166/problem/E
思路:比赛时,D,E两题都不会写,然后抱着试一试的态度对E分析,对于第i天,若其他天与该天是没有重合的,那么很明显是不合法的即"impossible",因此试着交了一发,结果过了,hhh,果断就是白给,加分美滋滋( ̄▽ ̄)~*
关于任意两天都有交集就一定有解 大佬博客: https://www.cnblogs.com/heyuhhh/p/10886903.html
第j天去了{a1,a2,⋯,ak}这些商店,那么我们将这些位置的数都乘以第j个质数 {2,3,5,7,11,...}。
最后如果任意两天之间存在交集的话,那么它的lcm肯定为所有质数的乘积,而它们补集的lcm肯定不存在当前天的质数。
所以这种构造方案就可以保证任意两天存在交集时是一定有解的。
Code:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAX_N=1e4+5;
const int MAX_M=55;
int n,m,T;
bool d[MAX_M][MAX_N];
int main()
{
ios::sync_with_stdio(false);
cin>>m>>n;
int x,s,p;
bool res=1;
for(int i=0;i<m;++i)
{
cin>>s;
for(int j=0;j<s;++j)
{
cin>>x;
d[i][x]=true;
}
if(!res) continue;
for(int k=0;k<i;++k)
{
p=0;
for(int j=1;j<=n;++j)
if(d[k][j]==d[i][j]&&d[k][j]){
p=1; break;
}
if(!p){
res=0; break;
}
}
}
if(res) cout<<"possible"<<endl;
else cout<<"impossible"<<endl;
return 0;
}