2023NOIP A层联测17-黑暗料理

2023-10-24 16:36
文章标签 17 黑暗 联测 2023noip 料理

本文主要是介绍2023NOIP A层联测17-黑暗料理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简要题意:在 n n n 个数中选尽可能多的数,使得任意两个数之和不是质数。

n ≤ 750 , a i ≤ 1 0 9 n\le750,a_i\le10^9 n750,ai109


两个数之和为质数,说明两个数一奇一偶,或者都是 1 1 1

把重复的 1 1 1 删去,因为后面不会同时选多个 1 1 1

建立二分图,奇数放在左边,偶数放在右边,若两个数之和为质数,就连一条边。这里用 miller rabin \text{miller rabin} miller rabin 判断。

我们的目标是删去尽可能少的点及其相邻的边,使所有边都被删去。这不就是二分图最小点覆盖问题吗?

而最小点覆盖等于最大匹配。所以只要对这个图求一次最大匹配即可。

于是就解决了。时间复杂度 O ( n 2 log ⁡ 2 n ) O(n^2\log^2n) O(n2log2n)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=1e9,NN=751,MM=280876;
int n,m,a[NN],cx[NN],cy[NN],vis[NN];
int head[NN],nxt[MM<<1],to[MM<<1],cnt=1;
bool cmp(int a,int b)
{int x=a&1,y=b&1;if(x!=y) return x<y;return a>b;
}
void add(int u,int v)
{to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
}
bool dfs(int u)
{for(int i=head[u];i;i=nxt[i]){if(!vis[to[i]]){vis[to[i]]=1;if(!cy[to[i]]||dfs(cy[to[i]])){cx[u]=to[i];cy[to[i]]=u;return 1;}}}return 0;
}
int match(int n)
{int ans=0;memset(cx,0,sizeof(cx));memset(cy,0,sizeof(cy));for(int i=1;i<=n;i++){memset(vis,0,sizeof(vis));if(!cx[i]) ans+=dfs(i);}return ans;
}
ll ksm(ll a,ll b,ll mod)
{ll ans=1;while(b){if(b&1) ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans;
}
int test[]={2,7,61};
bool check(ll a,ll x)
{ll czn=x-1;if(ksm(a,czn,x)!=1) return 0;do{ll xx=ksm(a,czn/2,x);if(xx!=1&&xx!=x-1) return 0;czn>>=1;}while(czn%2==0&&ksm(a,czn,x)==1);return 1;
}
bool miller_rabbin(ll x)
{if(x==1) return 0;if(x==2||x==7||x==61) return 1;for(int i=0;i<3;i++){if(!check(test[i],x))return 0;}return 1;
}
int main()
{freopen("cooking.in","r",stdin);freopen("cooking.out","w",stdout);int t;cin>>t;while(t--){cnt=0;memset(head,0,sizeof(head));memset(nxt,0,sizeof(nxt));scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);sort(a+1,a+1+n,cmp);int l=1;while(a[l]%2==0) l++;while(a[n-1]==1) n--;for(int i=1;i<l;i++){for(int j=l;j<=n;j++){if(miller_rabbin(a[i]+a[j])){add(i,j),add(j,i);}}}cout<<n-match(l-1)<<endl;}
}

这篇关于2023NOIP A层联测17-黑暗料理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/276448

相关文章

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博

OpenGL3.3_C++_Windows(17)

Demo演示 demo演示 绘制不同的图元(点,线…):  理解 glDrawArrays 和 glDrawElements的区别 glDrawArrays :渲染的图元模式mode(可以参考),起始位置,顶点数量glDrawElements渲染的图元模式mode,顶点数量,元素类型。元素索引数组glDrawArrays 不使用索引进行绘制,glDrawElements会使

LeetCode 每日一题 2024/6/17-2024/6/23

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/17 522. 最长特殊序列 II6/18 2288. 价格减免6/19 2713. 矩阵中严格递增的单元格数6/20 2748. 美丽下标对的数目6/21 LCP 61. 气温变化趋势6/22 2663. 字典序最小的美丽字符串6/23 520. 检测大写字母 6/1

机器学习周记(第四十四周:Robformer)2024.6.17~2024.6.23

目录 摘要ABSTRACT1 论文信息1.1 论文标题1.2 论文摘要1.3 论文引言1.4 论文贡献 2 论文模型2.1 问题描述2.2 Robformer2.2.1 Encoder2.2.2 Decoder 2.3 鲁棒序列分解模块2.4 季节性成分调整模块 摘要 本周阅读了一篇利用改进 Transformer 进行长时间序列预测的论文。论文模型为 Robformer ,其

Python学习笔记17:进阶篇(六)代码测试

代码测试 代码测试是软件开发过程中的关键环节,旨在确保代码质量、功能正确性以及性能符合预期。 在开发过程中,进行代码测试有很多好处: 提高软件质量:通过发现并修复错误,测试有助于提升软件的功能性、可靠性和稳定性,减少用户遇到的问题。降低维护成本:及早发现错误可以减少后期修复的复杂度和成本,因为错误在系统更复杂时更难追踪和修正。加速开发流程:自动化测试能够快速反馈代码变更的效果,使得开发者能迅

警惕!最新17本期刊(含2本Top)被“镇压”,无影响因子无分区,这是被踢了吗?

本周投稿推荐 SSCI • 中科院2区,6.0-7.0(录用友好) EI • 各领域沾边均可(2天录用) CNKI • 7天录用-检索(急录友好) SCI&EI • 4区生物医学类,0.5-1.0(录用率99%) • 1区工程类,6.0-7.0(进展超顺) • IEEE(TOP),7.5-8.0(实力强刊) 本期解析 1、2023JCR于昨天已经正式发布,其中有17本期

【Rust日报】 2019-07-17:微软安全响应中心:一种主动性的方式来提升安全

Rust的可测试组件设计 #TestableComponentDesign 本文简单介绍了在Rust中编写一个工程性更强的组件(crate)所必须要遵循的一些原则: 自动化测试覆盖需要可配置的依赖公共api应该更加易于使用和理解契约层应该尽量减少泛型的使用其他 Read More 从futures 0.1迁移到0.3 #TiKV #futures nrc 最近为TiKV的客户端从futures的

【Rust日报】 2021-01-17 Rust 要上太空了! RocketLab 招聘 Rust 工程师

Rust 要上太空了!RocketLab 招聘 Rust 工程师 Rocket Lab 是小型卫星发射领域的全球领导者。团队有500人,而且每周都在增加。 当然,这是在美国的工作。期待国内也会有! 链接:https://www.rocketlabusa.com/careers/positions/flight-software-engineer-ii-auckland-new-zealand-3

【Rust 日报】2022-02-17 Rust for Linux第四个补丁版本提交

Rust for Linux第四个补丁版本提交 Linux 内核和 Rust on Linux 的主要开发者 Miguel Ojeda 近日再向 Linux Kernel 邮件列表提交了一个新补丁 (v4),继续推进在 Linux 内核中增加对 Rust 作为第二语言支持。此举意味着对 Linux 内核驱动程序等的可选 Rust 编程支持继续成熟;Phoronix 称,按着这一趋势,今年或将有