ARC080F - Prime Flip

Solution

差分,转化为每次可以翻转i,j(j−i∈oddprime)i,j(j-i\in odd\;prime)i,j(j−i∈oddprime)。

显然若j−ij-ij−i是奇质数,则需要111次。
否则若j−ij-ij−i是偶数,则需要222次。
否则若j−ij-ij−i是奇数,则需要333次。

对于第一种,我们可以相差奇质数的点连边,显然这是一个二分图,跑二分图最大匹配即可。

剩下的尽量选222,最后还剩下的全选333

时间复杂度O(n3+W)O(n^3+W)O(n3+W)。

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
vector<int> V[2];
int num[2],match[105],f[105][105],vis[105],a[105],b[105],flag[10000005],prime[1000005],pnum=0;
void Init(int n)
{flag[1]=1;for (int i=2;i<=n;i++){if (!flag[i]) prime[++pnum]=i;for (int j=1;j<=pnum&&prime[j]*i<=n;j++){flag[i*prime[j]]=1;if (i%prime[j]==0) break; }}flag[2]=1;
}int find(int x)
{for (int j=1;j<=num[1];j++)if (!vis[j]&&f[x][j]){vis[j]=1;if (!match[j]||find(match[j])) { match[j]=x; return 1; }}return 0;
}
int getans()
{int ans=0;for (int i=1;i<=num[0];i++){for (int j=1;j<=num[1];j++) vis[j]=0;ans+=find(i);}return ans;
}
signed main()
{Init(10000000);int n=read(),Num=0;for (int i=1;i<=n;i++) a[i]=read();sort(a+1,a+n+1),a[0]=-1;for (int i=1;i<=n;i++) {if (a[i]-1!=a[i-1]) b[++Num]=a[i];if (a[i]+1!=a[i+1]) b[++Num]=a[i]+1;}for (int i=1;i<=Num;i++) V[b[i]&1].PB(b[i]),num[b[i]&1]++;for (int i=0;i<num[0];i++)for (int j=0;j<num[1];j++)if (!flag[abs(V[0][i]-V[1][j])]) f[i+1][j+1]=1;int t=getans();num[0]-=t,num[1]-=t;printf("%d\n",t+((num[0]>>1)<<1)+((num[1]>>1)<<1)+((num[0]&1)&&(num[1]&1))*3+(Num&1)*2);return 0;
}

ARC080F - Prime Flip(贪心,差分,二分图匹配)相关推荐

  1. 【TC10738】TheContest【Hall 定理】【贪心】【二分图匹配】

    题意:给 n×mn\times mn×m 的表格填入 [1,max⁡(n,m)][1,\max(n,m)][1,max(n,m)] 的数,每行每列不能重复,且字典序最小. n,m≤50n,m\leq ...

  2. zoj3988 二分图匹配

    给一个数组,对于每两个数加起来为素数那么就是一个集合,求不超过k个集合的最多数是多少 解法:二分图匹配,先打素数筛,预处理边集,匹配完之后分两种情况k>匹配数,那么可以直接输出匹配数*2,否则可 ...

  3. NOI图论算法:二分图匹配

    二分图匹配 算法竞赛入门经典训练指南+陈锋+ch5.5_二分图的匹配 https://www.bilibili.com/video/BV1j5411x7PU SWPU-ACM每周算法讲堂-匈牙利算法 ...

  4. BZOJ3168. [HEOI2013]钙铁锌硒维生素(线性代数+二分图匹配)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3168 题解 首先,我们需要求出对于任意的 \(i, j(1 \leq i, j \leq ...

  5. 二分图匹配及匈牙利算法的全面讲解及python实现

    1.背景 在生活中常常遇到两组元素多对多匹配而又数目有限的情况,我们需要对其进行最大匹配数的分配,使效率最大化.例如,有一组压缩气缸和一组压缩活塞,每一个型号的压缩气缸有一个固定的内径大小,每一个型号 ...

  6. 带权二分图匹配(最小费用最大流) 8.2牛客暑期多校训练营五 E

    E.room | 时间限制:1 秒 | 内存限制:256M Nowcoder University has 4n students and n dormitories ( Four students ...

  7. 算法讲解:二分图匹配

    二分图匹配,自然要先从定义入手,那么二分图是什么呢? 二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每 ...

  8. 算法讲解:二分图匹配【图论】

    二分图匹配,自然要先从定义入手,那么二分图是什么呢? 二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每 ...

  9. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

最新文章

  1. SLAM综述(1)-Lidar SLAM
  2. 【数据安全案例】个人信息倒卖产业链悄然形成,司法困境依旧待解
  3. 大连理工计算机专业等级,大连理工计算机专业全国排第几呀
  4. 复制中含有非法字符导致的错误
  5. 前端学习(2940):vue作为组件的注意事项
  6. 设计类网站|超实用的工具型网站!
  7. MsSql.RestApi - 构建ASP.NET REST API的最简单方法
  8. springboot + vue 拦截器重定向_springboot学习笔记
  9. 【Django】(3)创建网页:学习笔记主页
  10. 如何设置一个严格30分钟过期的Session 1
  11. TypeError: unsupported type for timedelta days component: Series
  12. 23种Python设计模式之建造者模式详解
  13. 高效能人士的七个习惯的简要定义与架构图
  14. spring框架 -- IOC
  15. MacBook外接显示器的显示模式介绍及设置说明(分屏/多屏)
  16. 三千繁华,感情在日子里
  17. 网络安全实验室|网络信息安全攻防学习平台(脚本关)
  18. 如何写好CSS?(OOCSS DRY SMACSS)
  19. ASP.NET MVC-4种过滤器
  20. OPENSSL与私有CA搭建

热门文章

  1. 掌握深度学习,为什么要用 PyTorch、TensorFlow 框架?
  2. 学好数学建模,走哪买菜都不怕!
  3. 用Python分析了20万场吃鸡数据,有不少有趣的发现
  4. 如果有人问你什么是大数据?不妨说说这10个典型的大数据案例
  5. 大一计算机课实训总结1000字,大一计算机实训报告.doc
  6. python运算符号输入_【Python】【运算符】
  7. 面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官
  8. java综合图形界面程序设计_java综合图形界面程序设计.doc
  9. 计算机应用技术编译原理考试题,《编译原理》练习题库含答案(大学期末复习资料).doc...
  10. android qq红包,Android实现QQ抢红包插件