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 ...
随机推荐
- javaSE中级篇3——集合体系(另外一种存储容器)——更新完毕
集合还是一种工具,所以它们的包都在java.util包下 1.集合的整个体系结构(是需要掌握的体系,完全体系不是这样) 对图中所说的 序和重复 这两词的说明: 序:指的是添加进去的元素和取出来的元素 ...
- Redis | 第11章 服务器的复制《Redis设计与实现》
目录 前言 1. 旧版复制功能的实现 1.1 同步与命令传播 1.2 旧版复制功能的缺陷 2. 新版复制功能的实现 2.1 部分重同步的实现原理 3. PSYNC 命令的实现 4. 复制的详细步骤 4 ...
- day04 sersync实时同步和ssh服务
day04 sersync实时同步和ssh服务 sersync实时同步 1.什么是实时同步 实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器. 2.为什么使 ...
- 30个类手写Spring核心原理之环境准备(1)
本文节选自<Spring 5核心原理> 1 IDEA集成Lombok插件 1.1 安装插件 IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多.Lombok是开 ...
- 【leetcode】43. Multiply Strings(大数相乘)
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and ...
- 图的存储(Java)以及遍历
// 深搜 private void dfs(int v) { visited[v] = true; System.out.print(v+" "); for (int i = 0 ...
- Output of C++ Program | Set 9
Predict the output of following C++ programs. Question 1 1 template <class S, class T> class P ...
- cordova配置与开发
1.环境配置 1.1.安装ant 从 apache官网 下载ant,安装并配置,将ant.bat所在目录加到path环境变量,如c:\apache-ant\bin\.在cmd中运行以下语句如不报错即可 ...
- Spring MVC与html页面的交互(以传递json数据为例)
一.导入相jar包 主要包括spring相关jar包和fastjson jar包,具体步骤略. 二.配置相关文件 1.配置web.xml文件 <?xml version="1.0&qu ...
- @Deprecated注解功能
@Deprecated注解功能 标记不建议使用的方法,但是仍然可以用 当方法有更好的方法替换时,但是此方法还有使用时可以使用该注解