题意:

给出n和s,匹配(s+1,s+2,s+3......s+n)和(1,2,3,4,5........n)让(s+x)%x==0,判断是否有解

思路:

先用程序跑一边,发现1到1e9得素数间隙小于300,那么如果n大于600时,一定会存在两个素数,直接输出no,否则就二分图匹配

比赛得时候wa无数遍,赛后看题解发现,素数还可以模自身啊,不一定非要匹配到1得位置。。。也就是说,当存在两个区间相交的时候,是允许存在两个素数的。

然后,我们需要证明,区间相交的部分一定是匹配自己最优,因为对于位置i,它可以匹配,i*1,i*2,i*3......那么显然匹配i的时候,留给其他位置更多匹配选择啊

ac代码:

  1. #include <cstdio>
  2. #include <iostream>
  3. #include<cstring>
  4. using namespace std;
  5. #define ll long long
  6. const int maxn=1000+10;
  7. int f[maxn],to[maxn*maxn],nex[maxn*maxn],cnt,vis[maxn],pe[maxn],n,s;
  8. void add(int a,int b)
  9. {
  10. cnt++;
  11. to[cnt]=b;
  12. nex[cnt]=f[a];
  13. f[a]=cnt;
  14. }
  15. bool is_ok(int x)
  16. {
  17. for(int i=f[x]; i; i=nex[i])
  18. {
  19. if(vis[to[i]]==0)
  20. {
  21. vis[to[i]]=1;
  22. if(pe[to[i]]==0||is_ok(pe[to[i]]))
  23. {
  24. pe[to[i]]=x;
  25. return true;
  26. }
  27. }
  28. }
  29. return false;
  30. }
  31. int main()
  32. {
  33. int T;
  34. cin>>T;
  35. for(int cn=1; cn<=T; cn++)
  36. {
  37. cnt=0;
  38. scanf("%d %d",&n,&s);
  39. if(n>s)
  40. {
  41. int kk=n;
  42. n=s;
  43. s=kk;
  44. }
  45. if(n>1000)
  46. {
  47. printf("Case #%d: No\n",cn);
  48. continue;
  49. }
  50. for(int i=1; i<maxn; i++)
  51. f[i]=0,pe[i]=0;
  52. memset(nex,0,sizeof(nex));
  53. for(ll i=s+1; i<=n+s; i++)
  54. {
  55. for(int j=1; j<=n; j++)
  56. {
  57. if(i%j==0)
  58. add(j,i-s);
  59. }
  60. }
  61. int ans=0;
  62. for(int i=1; i<=n; i++)
  63. {
  64. for(int j=1; j<=n; j++)vis[j]=0;
  65. if(is_ok(i))ans++;
  66. }
  67. if(ans!=n)
  68. printf("Case #%d: No\n",cn);
  69. else
  70. printf("Case #%d: Yes\n",cn);
  71. }
  72. return 0;
  73. }

  

hdu5943素数间隙与二分匹配的更多相关文章

  1. Kingdom of Obsession---hdu5943(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...

  2. D唐纳德和他的数学老师(华师网络赛)(二分匹配,最大流)

    Time limit per test: 1.0 seconds Memory limit: 256 megabytes 唐纳德是一个数学天才.有一天,他的数学老师决定为难一下他.他跟唐纳德说:「现在 ...

  3. POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24081   Accepted: 106 ...

  4. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  5. BZOJ 1189 二分匹配 || 最大流

    1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1155  Solved: 420[Submi ...

  6. poj 2060 Taxi Cab Scheme (二分匹配)

    Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5710   Accepted: 2393 D ...

  7. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  8. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  9. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...

随机推荐

  1. malloc和calloc用法

    malloc和calloc用法 #include <stdio.h> #include <stdlib.h> int main(){ int n; printf("i ...

  2. voinc+vue实现级联选择

    需求: vonic中实现级联选择 <!DOCTYPE html> <html> <head> <title>下拉框</title> < ...

  3. IntelliJ IDEA 创建Spring+SpringMVC+hibernate+maven项目

    第一步: 新建maven管理的web项目, 具体步骤参考:http://www.cnblogs.com/gczmn/p/8693734.html 第二步: 创建项目结构, 完整项目结构如下: 第三步: ...

  4. 聚类——WKFCM

    聚类——认识WKFCM算法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考文献:Shen H, Yang J, Wang S, et al. At ...

  5. 【大数据技术】Hadoop三大组件架构原理(HDFS-YARN-MapReduce)

    目前,Hadoop还只是数据仓库产品的一个补充,和数据仓库一起构建混搭架构为上层应用联合提供服务. Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起. ...

  6. Leetcode:0002(两数之和)

    LeetCode:0002(两数之和) 题目描述:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表.你可以假设除了数字 0 之外,这两 ...

  7. 爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容

    爬取说明 以单个页面为例,如:http://blog.jobbole.com/110287/ 我们可以提取标题.日期.多少个评论.正文内容等 Xpath介绍 1. xpath简介 (1) xpath使 ...

  8. day25 Python __setattr__

    #__getattr__只有在使用点调用属性且属性不存在的时候才会触发 class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(se ...

  9. leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String

    557. Reverse Words in a String III 最简单的把空白之间的词反转 class Solution { public: string reverseWords(string ...

  10. node.js服务端程序在Linux上持久运行

    如果要想在服务端部署node.js程序,让其持久化运行,就不能单单使用npm start命令运行,当然了,这样运行是毫无问题的,但是当关闭xshell窗口或者是关闭进程的时候(其实关闭xshell窗口 ...