1091. Tmutarakan Exams
1091. Tmutarakan ExamsTime limit: 1.0 second
Memory limit: 64 MB University of New Tmutarakan trains the first-class specialists in mental arithmetic. To enter the University you should master arithmetic perfectly. One of the entrance exams at the Divisibility Department is the following. Examinees are asked to find K different numbers that have a common divisor greater than 1. All numbers in each set should not exceed a given number S. The numbers K and S are announced at the beginning of the exam. To exclude copying (the Department is the most prestigious in the town!) each set of numbers is credited only once (to the person who submitted it first).
Last year these numbers were K=25 and S=49 and, unfortunately, nobody passed the exam. Moreover, it was proved later by the best minds of the Department that there do not exist sets of numbers with the required properties. To avoid embarrassment this year, the dean asked for your help. You should find the number of sets of K different numbers, each of the numbers not exceeding S, which have a common divisor greater than 1. Of course, the number of such sets equals the maximal possible number of new students of the Department.
InputThe input contains numbers K and S (2 ≤ K ≤ S ≤ 50).
OutputYou should output the maximal possible number of the Department's new students if this number does not exceed 10000 which is the maximal capacity of the Department, otherwise you should output 10000.
Sample
Problem Author: Stanislav Vasilyev
Problem Source: USU Open Collegiate Programming Contest March'2001 Senior Session |
2000–2016 Timus Online Judge Team. All rights reserved.
思路:和http://www.cnblogs.com/zzuli2sjy/p/5467008.html一样;
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<queue>
6 using namespace std;
7 typedef long long LL;
8 bool prime[100];
9 int ans[100];
10 int coutt[10000];
11 LL dp[60][60];
12 int ask[100];
13 int id[100];
14 queue<int>que;
15 int main(void)
16 {
17 int i,j,k,p,q;
18 dp[0][0]=1;
19 dp[1][0]=1;
20 dp[1][1]=1;
21 for(i=2; i<=60; i++)
22 {
23 for(j=0; j<=60; j++)
24 {
25 if(j==0||i==j)
26 {
27 dp[i][j]=1;
28 }
29 else dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
30 }
31 }
32 for(i=2; i<=10; i++)
33 {
34 if(!prime[i])
35 {
36 for(j=i; i*j<=50; j++)
37 {
38 prime[i*j]=true;
39 }
40 }
41 }
42 int cnt=0;
43 for(i=2; i<=50; i++)
44 {
45 if(!prime[i])
46 {
47 ans[cnt++]=i;
48 }
49 }
50 while(scanf("%d %d",&p,&q)!=EOF)
51 { int s;
52 memset(coutt,0,sizeof(coutt));
53 for(s=2; s<=q; s++)
54 {
55 int cc=s;
56 int flag=0;
57 int t=0;
58 while(cc>1)
59 {
60 if(cc%ans[t]==0&&flag==0)
61 {
62 flag=1;
63 que.push(ans[t]);
64 cc/=ans[t];
65 }
66 else if(cc%ans[t]==0)
67 {
68 cc/=ans[t];
69 }
70 else
71 {
72 t++;
73 flag=0;
74 }
75 }
76 int vv=0;
77 while(!que.empty())
78 {
79 ask[vv++]=que.front();
80 que.pop();
81 }
82 for(i=1; i<=(1<<vv)-1; i++)
83 {
84 LL sum=1;
85 int dd=0;
86 for(j=0; j<vv; j++)
87 {
88 if(i&(1<<j))
89 {
90 dd++;
91 sum*=ask[j];
92 }
93 }
94 id[sum]=dd;
95 coutt[sum]++;
96
97 }
98 }
99 LL summ=0;
100 for(i=2; i<=50; i++)
101 {
102 if(id[i]%2&&coutt[i]>=p)
103 {
104 summ+=dp[coutt[i]][p];
105 }
106 else if(coutt[i]>=p)summ-=dp[coutt[i]][p];
107 }if(summ>=10000)summ=10000;
108 printf("%lld\n",summ);
109 }
110 return 0;
111 }
1091. Tmutarakan Exams的更多相关文章
- ural 1091. Tmutarakan Exams(容斥原理)
1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...
- Ural 1091 Tmutarakan Exams
Tmutarakan Exams Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...
- ural 1091. Tmutarakan Exams 和 codeforces 295 B. Greg and Graph
ural 1091 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1091 题意是从1到n的集合里选出k个数,使得这些数满足gcd大于1 ...
- ural 1091. Tmutarakan Exams(容斥)
http://acm.timus.ru/problem.aspx? space=1&num=1091 从1~s中选出k个数,使得k个数的最大公约数大于1,问这种取法有多少种. (2<=k ...
- URAL - 1091 Tmutarakan Exams (简单容斥原理)
题意:K个不同数组成的集合,每个数都不超过S且它们的gcd>1.求这样的数的个数 分析:从2开始枚举gcd,但这样会发生重复.譬如,枚举gcd=2的集合个数和gcd=3的集合个数,枚举6的时候就 ...
- F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数
F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数. 思路 :记 录 一 下 每 个 数 的 ...
- Tmutarakan Exams URAL - 1091(莫比乌斯函数 || 容斥)
题意: 求1 - s 中 找出k个数 使它们的gcd > 1 求这样的k个数的对数 解析: 从每个素数的倍数中取k个数 求方案数 然后素数组合,容斥一下重的 奇加偶减 莫比乌斯函数的直接套模 ...
- 2014 Super Training #3 H Tmutarakan Exams --容斥原理
原题: URAL 1091 http://acm.timus.ru/problem.aspx?space=1&num=1091 题意:要求找出K个不同的数字使他们有一个大于1的公约数,且所有 ...
- URAL1091. Tmutarakan Exams(容斥)
1091 容斥原理 #include <iostream> #include<cstdio> #include<cstring> #include<algor ...
随机推荐
- kubernetes部署Docker私有仓库Registry
在后面的部署过程中,有很多的docker镜像文件,由于kubernetes是使用国外的镜像,可能会出现下载很慢或者下载不下来的情况,我们先搭建一个简单的镜像服务器,我们将需要的镜像下载回来,放到我们自 ...
- 计算机网络-4-7-内部网关协议OSPF
内部网关协议OSPF(开放最短路径优先) 出现的原因:为了克服RIP协议的缺点在1989年开发出来,**开放 表明OSPF协议不受任何厂家的限制.最短路径优先是因为使用了最短路径算法SPF**. OS ...
- Slay 全场!Erda 首次亮相 GopherChina 大会
来源|尔达 Erda 公众号 相关视频:https://www.bilibili.com/video/BV1MV411x7Gm 2021 年 6 月 26 日,GopherChina 大会准时亮相北京 ...
- day02 Linux基础
day02 Linux基础 1.什么是服务器 服务器,也称伺服器,是提供计算服务的设备.由于服务器需要响应服务请求,并进行处理,因 此一般来说服务器应具备承担服务并且保障服务的能力. windows: ...
- [php安全]原生类的利用
php原生类的利用 查看原生类中具有魔法函数的类 $classes = get_declared_classes(); foreach ($classes as $class) { $methods ...
- 【JAVA开发】浅析双亲委派机制
双亲委派机制存在的意义 双亲委派只是一种说法,个人觉得叫单亲委派更合适,因为向上传递的父类只有一个,估计只是翻译过来的,形成的一种习惯,大家可以当做单亲委派 四种加载器都是用于类的加载,只是加载的对象 ...
- c学习 - 第三章:数据类型、运算符与表达式
数据类型 基本类型 整型 短整型(short int) 基本整型(int) 长整型(long int) 字符型(char) 浮点型 单精度(float) 双精度(double) 长双精度(long d ...
- 转 GSON
转 https://www.jianshu.com/p/75a50aa0cad1 GSON弥补了JSON的许多不足的地方,在实际应用中更加适用于Java开发.在这里,我们主要讲解的是利用GSON来操作 ...
- java中的collection小结
Collection 来源于Java.util包,是非常实用常用的数据结构!!!!!字面意思就是容器.具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景. ...
- Spring DM 2.0 环境配置 解决Log4j问题
搭建 spring dm 2.0 环境出的问题 log4j 的问题解决办法是 一.引入SpringDM2.0的Bundle,最后完成如下图所示:注意:要引入slf4j.api.slf4j.log4j. ...