# Kingdom of Obsession

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 200    Accepted Submission(s): 64

Problem Description
There is a kindom of obsession, so people in this kingdom do things very strictly.

They name themselves in integer, and there are
xmody=0

Input
First line contains an integer

Output
For every test case, you should output 'Case #x: y', where x indicates the case number and counts from 1 and y is the result string.

If there is any way to satisfy everyone's requirement, y equals 'Yes', otherwise y equals 'No'.

Sample Input
2 5 14 4 11

Sample Output
Case #1: No Case #2: Yes

Source

20亿内两个素数之间最大间隔不会超过300，所以超过600直接输出No.所以解法就是小数据二分图匹配,大数据直接输出No.防止区间相交,要特判一下n,s的大小.
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std;
typedef long long LL;
const int N = 2016;
int s,n;
int graph[N][N];
bool vis[N];
bool dfs(int u){
for(int i=1;i<=n;i++){
if(graph[u][i]==1&&!vis[i]){
vis[i] = true;
return true;
}
}
}
return false;
}
int main()
{
int t = 1,tcase;
scanf("%d",&tcase);
while(tcase--){
scanf("%d%d",&s,&n);
if(s<n) swap(s,n);
if(n>1000) {
printf("Case #%d: No\n",t++);
continue;
}
memset(graph,0,sizeof(graph));
int res = 0;
for(int i=1;i<=n;i++){
int t = i+s;
for(int j=1;j<=n;j++){
if(t%j==0) {
graph[i][j] = 1;
}
}
}
for(int i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if(dfs(i)) res++;
}
if(res==n){
printf("Case #%d: Yes\n",t++);
}else printf("Case #%d: No\n",t++);
}
return 0;
}

posted @ 2016-10-30 10:26  樱花庄的龙之介大人  阅读(...)  评论(...编辑  收藏