题意

有 \(n\) 个数 \(s+1\ldots s+n\),求是否能将这 \(n\) 个数放到 \(1\ldots n\) 上,且当令原数为 \(x\),放到 \(y\) 位置时有 \(x \mod y=0\)。

不超过 \(100\) 组数据,\(1\le n \le 10^9,0\le s\le 10^9\)。

题解

看上去很吓人的数据范围,也是一个让你以为这是结论题的数据范围。

但是仔细观察可以发现,当 \(s+1\ldots s+n\) 中有 \(2\) 个及以上质数时,只有将他们安排到 \(1\) 位置或者质数自身位置才有 \(x\mod y=0\)。

首先尝试将这两个质数安排到其自身的位置,这要求 \([s+1,s+n]\cap [1,n]\neq \varnothing\),即要求 \(s<n\)。

那么此时 \([s+1,n]\) 就能够安排到自己的位置了,那么就只剩下 \([n+1,s+n]\) 和 \([1,s]\) 了,可以发现这就是 \(s\) 和 \(n\) 交换后的结果。

但是,当 \(s\) 与 \(n\) 交换后,或者 \(s\) 与 \(n\) 不能交换时,存在 \(2\) 个或以上质数,那么显然无解了。另外,根据结论,在 \([2,10^9]\) 范围内,大约 \(300\) 个数就会出现一次质数,这里保险起见设 \(1000\) 个数出现一次质数。

这里又有一个很神奇的问题,ans+=can[i] 前面不能加 if(!match[i]),具体原因未知。

代码

#include<cstdio>
#include<algorithm>
#include<cstring>
const int MAXN=2000+5;
int n,s,match[MAXN],ver,vis[MAXN];
bool can(int x)
{
vis[x]=ver;
for(int i=1;i<=n;i++)
if((s+x)%i==0 && (!match[i]||(vis[match[i]]!=ver&&can(match[i]))))
{
match[i]=x;
return 1;
}
return 0;
}
int main()
{
int T;
scanf("%d",&T);
for(int t=1;t<=T;t++)
{
memset(vis,0,sizeof(vis));
memset(match,0,sizeof(match));
scanf("%d %d",&n,&s);
if(s<n) std::swap(n,s);
if(n>1000)
{
printf("Case #%d: No\n",t);
continue;
}
int ans=0;
for(int i=1;i<=n;i++)
{
ver=i;
ans+=can(i);
}
printf("Case #%d: %s\n",t,ans==n?"Yes":"No");
}
return 0;
}

HDU5943 Kingdom of Obsession 题解的更多相关文章

  1. hdu5943 Kingdom of Obsession 二分图+打表找规律

    题目传送门 Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  2. hdu 5943 Kingdom of Obsession 二分图匹配+素数定理

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  3. HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  4. 「国庆训练」Kingdom of Obsession(HDU-5943)

    题意 给定\(s,n\),把\(s+1,s+2,...,s+n\)这\(n\)个数填到\(1,2,...,n\)里,要求\(x\)只能填到\(x\)的因子的位置(即题目中\(x\%y=0\)那么x才能 ...

  5. HDU 5943 Kingdom of Obsession

    题意:n个人编号为[s+1, s+n],有n个座位编号为[1,n],编号为 i 的人只能坐到编号为它的约数的座位,问每个人是否都有位置坐. 题解:由于质数只能坐到1或者它本身的位置上,所以如果[n+1 ...

  6. [HDOJ5943]Kingdom of Obsession(最大匹配,思路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:n个人编号为[s+1,s+n],有n个座位编号为[1,n],编号为i的人只能坐到编号为它的 ...

  7. HDU 5938 Kingdom of Obsession(数论 + 二分图匹配)

    题意: 给定S,N,把S+1,S+2,...S+N这N个数填到1,2,...,N里,要求X只能填到X的因子的位置.(即X%Y=0,那么X才能放在Y位置) 问是否能够放满. 分析:经过小队的分析得出的结 ...

  8. 【HDOJ5943】Kingdom of Obsession(数论)

    题意:给定n个人,n个座位,人的编号是[1,n],座位的编号是[s+1,s+n],编号为i的人能坐在编号为j的座位上的条件是j%i=0 问是否存在一组方案使得座位和人一一对应 n,s<=1e9 ...

  9. hdu 5943(素数间隔+二分图匹配)

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

随机推荐

  1. Docker 安装 Kibana

    使用和 elasticsearch 相同版本镜像 7.4.1 (不一样可能会出现问题) 1.下载Kibana镜像  # 下载Kibana镜像 docker pull kibana: # 查看镜像 do ...

  2. vPC配置

    1.vPC概述 如下图所示,在传统网络中,出于冗余考虑,汇聚层往往由2台设备构成,一台接入层交换机使用2根上联链路,分别连接汇聚层2台设备. 这种拓扑所带来的问题是:受制于STP,对于同一个VLAN的 ...

  3. js屏幕上下滚动条

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. JAVA 通过POI 模版,导出excel

    如有不足,欢迎指正,谢谢 ! 1.Maven引入  POI jar包.模版和结果文件.rar下载 <dependency> <groupId>org.apache.poi< ...

  5. centos610最小安装之后 后续设置

    1.网络配置 centos选择最小桌面(如果不用到类似Oracle需要用到桌面的软件,则操作系统安装最小化安装)安装之后 查看网络配置如下: 截图显示网络并未启用. 2.开启网络设置 cd /etc/ ...

  6. 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)

    题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...

  7. Centos7 [ubuntu] 安装pycharm2019.1.3并永久破解教程

    一.安装pycharm2019专业版并激活步骤 1.拉取安装包 # wget   https://download.jetbrains.com/python/pycharm-professional- ...

  8. 什么是Socket:

    先了解一些前提: 网络由下往上分为 物理层 .数据链路层 . 网络层 . 传输层 . 会话层 . 表现层 和 应用层.通过初步了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对 ...

  9. LeetCode中等题(二)

    题目一: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复 ...

  10. Charles + Android 抓取Https数据包 (适用于Android 6.0及以下)

    通过Charles代理,我们能很轻易的抓取手机的Http请求,因为Http属于明文传输,所以我们能直接获取到我们要抓取的内容.但是Https内容本身就是加密的,这时我们会发现内容是加密的了.本文我们来 ...