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 ...
随机推荐
- Spark(九)【RDD的分区和自定义Partitioner】
目录 spark的分区 一. Hash分区 二. Ranger分区 三. 自定义Partitioner 案例 spark的分区 Spark目前支持Hash分区和Range分区,用户也可以自定义分区 ...
- HDFS初探之旅(一)
1.HDFS简介 ...
- centos 7 重新获取IP地址
1.安装软件包 dhclient # yum install dhclient 2.释放现有IP # dhclient -r 3.重新获取 # dhclient 4.查看获取到到IP # ip a
- vmware使用nat连接配置
一.首先查看自己的虚拟机服务有没有开启,选择电脑里面的服务查看: 1.计算机点击右键选择管理 2.进入管理选择VM开头的服务如果没有开启的话就右键开启 二.虚拟机服务开启后就查看本地网络虚拟机的网 ...
- NSMutableArray-->NSString
1.如何把NSMutableArray 转化为NSString//用字符将NSArray中的元素拼接起来 NSArray *array = [NSArray arrayWithObjects:@&qu ...
- 3.Vue.js-目录结构
Vue.js 目录结构 上一章节中我们使用了 npm 安装项目,我们在 IDE(Eclipse.Atom等) 中打开该目录,结构如下所示: 目录解析 目录/文件 说明 build 项目构建(webpa ...
- vivo浏览器的快速开发平台实践-总览篇
一.什么是快速开发平台 快速开发平台,顾名思义就是可以使得开发更为快速的开发平台,是提高团队开发效率的生产力工具.近一两年,国内很多公司越来越注重研发效能的度量和提升,基于软件开发的特点,覆盖管理和优 ...
- Mysql资料 慢查询
目录 一.简介 二.查询 三.开启 永久配置 临时配置 四.测试 一.简介 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句. 具体环 ...
- Nginx配置缓存
目录 一.简介 二.配置 三.其它参数 忽略Cache-Control头部 缓存post请求 缓存动态内容 使用Cookie作为缓存键的一部分 手动清理缓存 支持断点续传 设置查看缓存命中与否 一.简 ...
- HMAC在“挑战/响应”(Challenge/Response)身份认证的应用
HMAC的一个典型应用是用在"挑战/响应"(Challenge/Response)身份认证中. 认证流程 (1) 先由客户端向服务器发出一个验证请求. (2) 服务器接到此请求后生 ...