题目链接:https://codeforces.com/contest/1166/problem/E

题目大意:首先是n个数,然后有m次划分,每一次输入第一部分(下标),第一部分的补给为第二部分。然后问你能否(给a数组赋值)保证每一次的第一部分的数的lcm严格大于第二部分的lcm。

具体思路:

首先说一个性质,集合A为集合B的子集,那么lcm(A)<= lcm(B)。

反证法:

假设当前输入的m为2,我们将每一次输入分为

D1 S1

D2 S2.

假设D1与D2的交集为0  - >  D2一定为S1的子集 - > D1一定为S2的子集 .

假设输入的样例合法。

那么lcm(D1)>lcm(S1)>= lcm(D2)>  lcm(S2)> = lcm(D1)。

显然矛盾。

我们当前就可以得到这个结论,当任意两组的交集为0的时候,这个时候一定是不合法的。

接下来再去证明当两组的交集不是0的时候,一定是合法的。

我们假设a数组的数全部为1.当输入第i组的时候,D1中的数全部乘以第i个素数。以此类推。

这样的话,我们所有的Di的lcm都为前i个素数相乘的结果。

Si肯定为Di的真子集。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 # define ll long long
 4 # define inf 0x3f3f3f3f
 5 # define ull unsigned long long
 6 const int maxn  = 2e4+100;
 7 const int N = 55;
 8 int sto[N][maxn];
 9 int num[maxn];
10 int main()
11 {
12     int n,m,tmp;
13     scanf("%d %d",&n,&m);
14     for(int i=1; i<=n; i++)
15     {
16         scanf("%d",&num[i]);
17         for(int j=1; j<=num[i]; j++)
18         {
19             scanf("%d",&tmp);
20             sto[i][tmp]++;
21         }
22     }
23     int flag=1;
24     for(int i=1; i<=n; i++)
25     {
26         for(int j=1; j<=n; j++)
27         {
28             int flag=1;
29             for(int k=1; k<=10000; k++)
30             {
31                 if(sto[i][k]&&sto[j][k])
32                 {
33                     flag=0;
34                     break;
35                 }
36             }
37             if(flag)
38             {
39                 printf("impossible\n");
40                 return 0;
41             }
42         }
43     }
44     printf("possible\n");
45     return 0;
46 }

转载于:https://www.cnblogs.com/letlifestop/p/10901836.html

E. The LCMs Must be Large(思维)相关推荐

  1. CF1166E The LCMs Must be Large

    CF1166E The LCMs Must be Large 构造趣题 正着推其实很不好推 不妨大力猜结论 如果两两集合都有交,那么一定可以 证明: 1.显然如果两个集合没有交,一定不可以 2.否则给 ...

  2. Codeforces - 1166E - The LCMs Must be Large

    Codeforces - 1166E - The LCMs Must be Large 地址 http://codeforces.com/contest/1166/problem/E 原文地址 htt ...

  3. Codeforces Round #561 (Div. 2)-E. The LCMs Must be Large

    地址:https://codeforces.com/contest/1166/problem/E 思路:比赛时,D,E两题都不会写,然后抱着试一试的态度对E分析,对于第i天,若其他天与该天是没有重合的 ...

  4. codeforces1166E. The LCMs Must be Large

    题目链接 琪亚娜世界第一可爱 现在有两个人,Swiper和Dora,在m天中,每天Swiper先从n个位置上取一些数,剩下的就是Dora的数,要求在这个m天中,每天Swiper取出的数的lcm都要比D ...

  5. Potato的暑期训练day#1题解 ——毒瘤构造

    Potato的暑期训练day#1 --毒瘤构造 题目链接: A.https://vjudge.net/problem/HDU-1214 B.https://vjudge.net/problem/Cod ...

  6. 常用git命令思维图

    git常用命令思维导图 问题解决 一.大文件限制(超过100M) 报错提醒: remote: warning: Large files detected. remote: error: File xx ...

  7. b端 ux 设计思维_借助系统思维从视觉设计过渡到UX

    b端 ux 设计思维 "How can I switch to UX?" This is a common question from visual designers becau ...

  8. 【2017年第3期】Talent Network:一个基于设计思维的企业社交网络服务

    夏帆, 丁铖, 钱卫宁, 周傲英, Gopakumar Gopalakrishnan, Anjaneyulu Passala 华东师范大学 中图分类号:TP391     文献标识码:A doi:10 ...

  9. 程序员思维是什么?程序员思维从哪里来?程序员思维到哪里去?

    程序员思维是什么? 程序员思维从哪里来? 程序员思维到哪里去? 好吧,这是三个终极的问题.没有标准答案,也没有什么不标准的答案.我只是试图给出自己的一个思考的总结. 再解释程序员思维是什么问题这个问题 ...

最新文章

  1. Tensorflow加载多个模型
  2. OpenCV的k - means聚类 -对图片进行颜色量化
  3. 用权值实现数据被抽取的概率
  4. Boost:使用find_if()算法来检测两个向量交叉的点
  5. python nltk lemmatizer_Python聊天机器人–使用NLTK和Keras构建第一个聊天机器人
  6. 算法(13)-leetcode-explore-learn-数据结构-链表小结
  7. 信息奥赛一本通(1119:矩阵交换行)
  8. 三层路由详解、为什么要划分vlan,vlan的作用是什么?
  9. 4.业务架构·应用架构·数据架构实战 --- 业务驱动的应用架构设计
  10. grads 相关系数_GrADS实习报告6
  11. 关于开灯问题的两种解法
  12. 记一些Linux/centos的基础运维命令
  13. 数据中台各种架构图大全
  14. 什么是过拟合?过拟合的10个解决办法都有哪些?
  15. 使用Redis如何设置永久密码
  16. NLP数据预处理的一般方法
  17. Linux 使用curl认证深信服上网行为管理
  18. Spring基础—装配bean(一)
  19. 计算机网络安全包括免疫性吗,【单选题】计算机网络安全的目标不包括A. 保密性 B. 不可否认性 C. 免疫性 D. 完整性...
  20. java8新特性 Stream流之根据条件过滤统计个数

热门文章

  1. 【算法分析】Lucas–Kanade光流算法
  2. JSX介绍-基本使用
  3. python中turtle的用法及实例--你的唐僧哥哥
  4. 我的2018年竞赛之路总结
  5. 冯·诺伊曼可以,你也可以!
  6. 使用阿里云的短信服务发送短信
  7. OpenGL显示窗口重定形函数
  8. CRMEB在线教育知识付费系统应用领域及功能介绍
  9. Electron理论知识 1-GN语法及使用介绍
  10. python_爬虫 12 多线程爬虫