QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#641575 | #9457. Prime Set | masterhuang | AC ✓ | 276ms | 12996kb | C++23 | 1.3kb | 2024-10-14 21:19:23 | 2024-10-14 21:19:23 |
Judging History
answer
//qoj 9457
//https://qoj.ac/contest/1807/problem/9457
#include<bits/stdc++.h>
#define LL long long
#define fr(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);
using namespace std;
const int N=3e3+5;
int TT,n,m,a[N],tot,p[N];bool v[N],in[N];
vector<int>g[N];
bool dfs(int x)
{
v[x]=1;
for(int i:g[x]) if(!v[i])
{
v[i]=1;
if(!p[i]||dfs(p[i])) return p[i]=x,p[x]=i,1;
}return 0;
}
namespace Prime
{
const int N=2e6+5;
int pr[N];bool v[N];
inline void init(int M)
{
for(int i=2;i<=M;i++)
{
if(!v[i]) pr[++pr[0]]=i;
for(int j=1;j<=pr[0]&&i*pr[j]<=M;j++)
{
v[i*pr[j]]=1;
if(i%pr[j]==0) break;
}
}fill(v+1,v+1+M,0);
for(int i=1;i<=pr[0];i++) v[pr[i]]=1;
}
inline bool chk(int x){return v[x];}
}using Prime::chk;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>TT;Prime::init(2e6);
while(TT--)
{
cin>>n>>m;int ans=0;
for(int i=1;i<=n;i++) cin>>a[i],g[i].clear(),p[i]=-1;
for(int i=1;i<=n;i++) for(int j=1;j<i;j++) if(chk(a[i]+a[j]))
g[i].push_back(j),g[j].push_back(i),p[i]=p[j]=0;
for(int i=1;i<=n;i++) if(!p[i]) fill(v+1,v+1+n,0),ans+=dfs(i);
if(m<=ans) cout<<2*m<<"\n";
else
{
int res=0;
for(int i=1;i<=n;i++) res+=(!p[i]);
cout<<2*ans+min(res,m-ans)<<"\n";
}
}
return 0;
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 5ms
memory: 6200kb
input:
4 4 2 2 3 4 5 5 3 3 4 12 3 6 6 3 1 3 6 8 1 1 1 0 1
output:
4 3 6 0
result:
ok 4 lines
Test #2:
score: 0
Accepted
time: 276ms
memory: 12996kb
input:
110 3 3 2 2 2 3 1 1 1 1 3 2 1 1 1 3 3 1 1 1 4 2 1 1 1 1 10 7 1 1 1 2 4 6 8 10 12 14 18 1 10 5 9 4 10 7 2 4 9 1 6 1 4 9 2 4 9 7 19 5 1 6 1 8 8 1 5 10 9 2 10 2 1 9 6 10 4 3 6 14 4 6 6 8 9 5 3 4 9 2 2 1 10 10 1 15 10 5 4 2 4 10 1 8 4 10 3 10 3 7 10 4 17 5 10 7 2 4 3 1 10 8 2 8 3 4 1 1 1 1 1 20 6 8 4 6 ...
output:
0 2 3 3 4 8 2 10 8 15 10 12 10 10 12 16 10 10 12 16 14 13 13 14 17 0 19 12 12 11 16 10 19 2 12 10 5 14 10 10 13 2 18 2 4 4 11 8 11 8 0 10 10 0 10 0 8 15 12 11 13 18 10 17 9 8 20 19 13 6 4 6 11 9 13 11 6 2 8 12 17 14 6 2 20 2 18 17 6 2 10 0 7 16 2 2 0 2 18 14 11 8 4 6 0 19 890 204 2746 2372
result:
ok 110 lines
Extra Test:
score: 0
Extra Test Passed