Kingdom of Obsession HDU

来源:互联网 发布:逆战刷枪软件永久免费 编辑:程序博客网 时间:2024/06/07 13:16

题目传送门

题意:给你N和S,形成一个新的序列(S+1, S+2, ….., S+N)这些数字能不能一一对应1~N的数字将它们整除。

思路:这个题一开始在手推规律,然后推了发现没有什么规律,但是发现如果新的序列与1~N中不重复的地方存在两个素数就一定不满足了,然后发现两个素数之间的距离不会很远,然后将想把少于两个素数的情况用二分图匹配来做,但是考虑到数字可能会很大就用了map然后就超时了。后来看了别人的,发现n和s互换是对结果没有影响的(手推没发现啊),在题目所给的数据范围下,连续两个素数是不会超过600的,然后就可以特判掉一部分,剩下的用二分图匹配。

#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <fstream>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <sstream>#include <stack>#include <string>#include <vector>#define MAXN 1010#define MAXE 5#define INF 1000000000#define MOD 1000000007#define LL long long#define pi acos(-1.0)using namespace std;vector<int> vec[MAXN];bool is_primer(LL x) {    if (x == 1) {        return false;    }    if (x == 2) {        return true;    }    for (LL i = 2; i <= sqrt(x) + 1; ++i) {        if (x % i == 0) {            return false;        }    }    return true;}bool used[MAXN];int linker[MAXN];bool dfs(int u) {    for (int i = 0; i < vec[u].size(); i++) {        if (!used[vec[u][i]]) {            used[vec[u][i]] = true;            if (linker[vec[u][i]] == 0 || dfs(linker[vec[u][i]])) {                linker[vec[u][i]] = u;                return true;            }        }    }    return false;}int main() {    std::ios::sync_with_stdio(false);    LL n, s;    int T;    cin >> T;    for (int kase = 1; kase <= T; ++kase) {        memset(vec, 0, sizeof(vec));        cin >> n >> s;        cout << "Case #" << kase << ": ";        if (n > s) {            swap(n, s);        }        if (n > 600) {            cout << "No\n";        } else {            for (int i = 1; i <= n; ++i) {                LL temp = i + s;                for (int j = 1; j <= n; ++j) {                    if (temp % j == 0) {                        vec[i].push_back(j);                    }                }            }            memset(linker, 0, sizeof(linker));            int ans = 0;            for (int i = 1; i <= n; ++i) {                memset(used, false, sizeof(used));                if (dfs(i)) {                    ans++;                }            }            if (ans == n) {                cout << "Yes\n";            } else {                cout << "No\n";            }        }    }    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 洗了冷水头头痛怎么办 头发烫染后干枯毛躁怎么办 扎不起来的短发怎么办 发际线掉头发怎么办偏方 头上脓包掉头发怎么办 小孩头发少又黄怎么办 发旋哪里头发少怎么办 每次洗头发都掉好多怎么办 10岁儿童掉头发怎么办 1岁半宝宝掉头发怎么办 头发掉发严重怎么办吃什么 掉了一块钱很气怎么办 头发软又少怎么办盘头 头发出油掉的厉害怎么办 头发很油又少怎么办 18岁头发发量少怎么办 头发少长的慢怎么办 额头大发际线高怎么办 前额两边的头发变少了怎么办 吃减肥药掉头发怎么办 牙长智齿吃饭疼怎么办 头发稀少容易掉发怎么办 大把掉发头发稀少怎么办 头发掉厉害洗生发灵更掉怎么办? 额头两侧和头顶头发少怎么办 额头前面头发少怎么办天生的 头两边的碎头发怎么办 30岁后头发少怎么办 生完孩子头发少怎么办 1岁宝宝头发少怎么办 头顶上的头发少怎么办呢 22岁头顶头发稀少怎么办 头发又稀又少怎么办 头顶的头发越来越少怎么办 四岁宝宝头发稀少怎么办 一岁宝宝头发稀少怎么办 三岁宝宝头发稀少怎么办 头发油急着出门怎么办 长出的头发毛糙弯曲怎么办 头发薄还掉头发怎么办 头发少掉的厉害怎么办