QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#635184 | #9457. Prime Set | ucup-team3510# | AC ✓ | 57ms | 7212kb | C++14 | 1.6kb | 2024-10-12 19:14:20 | 2024-10-12 19:14:20 |
Judging History
answer
#include<iostream>
#include<vector>
#include<bitset>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=2e6;
int T,n,m,a[3010],p[3010];
bool mark[N+10];
vector<int> v[2];
bitset<3010> e[3010],V;
bool dfs(int now)
{
while(1)
{
int t=(e[now]&V)._Find_first();
if(t>v[1].size())
{
return 0;
}
V.reset(t);
if(p[t]<0||dfs(p[t]))
{
p[t]=now;
return 1;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
for(int i=2;i<=N;i++)
{
if(!mark[i])
{
for(int j=i<<1;j<=N;j+=i)
{
mark[j]=1;
}
}
}
cin>>T;
while(T--)
{
cin>>n>>m;
v[0].clear(),v[1].clear();
for(int i=1;i<=n;i++)
{
cin>>a[i];
v[a[i]+1&1].emplace_back(a[i]);
}
int cnt=n,ans=0,f=0;
for(int i=1;i<=n;i++)
{
bool flag=1;
for(int j=1;j<=n;j++)
{
if(i==j)
{
continue;
}
if(!mark[a[i]+a[j]])
{
flag=0;
break;
}
}
cnt-=flag;
}
sort(v[0].begin(),v[0].end());
sort(v[1].begin(),v[1].end());
for(int i=0;i<v[0].size();i++)
{
e[i].reset();
for(int j=0;j<v[1].size();j++)
{
if(!mark[v[0][i]+v[1][j]])
{
e[i].set(j);
}
}
}
memset(p,-1,sizeof(p));
for(int i=v[0].size()-1;i>=0;i--)
{
V.set();
if(dfs(i))
{
ans++;
}
else
{
if(v[0][i]==1)
{
f=i+1>>1;
break;
}
int j=i-1;
while(j>=0&&v[0][j]==v[0][i])
{
j--;
}
i=j+1;
}
}
ans+=f;
if(m>=ans)
{
int t=(ans<<1)+m-ans;
cout<<min(cnt,t)<<'\n';
continue;
}
cout<<(m<<1)<<'\n';
}
return 0;
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 7ms
memory: 5556kb
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: 57ms
memory: 7212kb
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