QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#631729#9457. Prime Setucup-team4863#AC ✓28ms10324kbC++142.0kb2024-10-12 09:58:482024-10-13 18:37:43

Judging History

This is a historical verdict posted at 2024-10-13 18:37:43.

  • [2024-10-13 19:27:32]
  • 自动重测本题所有获得100分的提交记录
  • Verdict: AC
  • Time: 26ms
  • Memory: 8336kb
  • [2024-10-13 19:27:24]
  • hack成功,自动添加数据
  • (/hack/967)
  • [2024-10-13 18:37:43]
  • 管理员手动重测本题所有得分≥97分的提交记录
  • Verdict: 100
  • Time: 28ms
  • Memory: 10324kb
  • [2024-10-13 18:24:51]
  • hack成功,自动添加数据
  • (/hack/965)
  • [2024-10-13 18:17:54]
  • hack成功,自动添加数据
  • (/hack/963)
  • [2024-10-12 09:58:48]
  • Judged
  • Verdict: 100
  • Time: 27ms
  • Memory: 8240kb
  • [2024-10-12 09:58:48]
  • Submitted

answer

// created:  2024-10-12 09:27:04
#include<cstdio>
#include<cctype>
#include<algorithm>
#define F(i,l,r) for(int i=l,i##_end=r;i<i##_end;++i)
#define I128 //||is_same<T,__int128_t>::value||is_same<T,__uint128_t>::value
using namespace std;
template<typename T>enable_if_t<is_integral<T>::value I128,void> readmain(T &x)
{
	bool neg=false;int c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')neg=true;
	for(x=0;isdigit(c);c=getchar())x=(T)(10*x+(c-'0'));
	if(neg)x=-x;
}
template<typename T>T& read(T &x){readmain(x);return x;}
template<typename T,typename ...Tr>void read(T &x,Tr&... r){readmain(x);read(r...);}
constexpr int N=3005,M=2e6;
bool pri[M],g[N][N];
int n,k,n2,a1[N],a2[N],ma[N],ima[N],d[N],q[N],qf,qr;
bool v1[N],v2[N],vis[N];
bool dfs(int u)
{
	F(v,0,n2)if(g[u][v])
	{
		if(!~ima[v])return ima[ma[u]=v]=u,d[u]=-1,true;
		else if(d[ima[v]]==d[u]+1&&dfs(ima[v]))return ima[ma[u]=v]=u,d[u]=-1,true;
	}
	d[u]=-1;
	return false;
}
bool bfs(int n1)
{
	F(i,0,n1)d[i]=-1;
	qf=qr=0;
	F(i,0,n1)if(!~ma[i])d[q[qr++]=i]=0;
	while(qf<qr)
	{
		int u=q[qf++];
		F(v,0,n2)if(g[u][v])
		{
			if(!~ima[v])return true;
			else if(!~d[ima[v]])d[q[qr++]=ima[v]]=d[u]+1;
		}
	}
	return false;
}
int run(int n1)
{
	int ans=0;
	while(bfs(n1))F(i,0,n1)if(!d[i])ans+=dfs(i);
	return ans;
}
int n1;
void solve()
{
	read(n,k);
	int rn=0;
	n1=n2=0;
	int one=0;
	F(i,0,n)
	{
		int a;read(a);
		if(a==1)++one;
		else if(a&1)a1[n1++]=a;
		else a2[n2++]=a;
	}
	F(i,0,one)a1[n1++]=1;
	F(i,0,n1)v1[i]=false;
	F(i,0,n2)v2[i]=false;
	if(one>1)F(i,n1-one,n1)v1[i]=true;
	F(i,0,n1)F(j,0,n2)if((g[i][j]=pri[a1[i]+a2[j]]))v1[i]=v2[j]=true;
	F(i,0,n1)rn+=v1[i];
	F(i,0,n2)rn+=v2[i];
	F(i,0,n1)ma[i]=-1;
	F(i,0,n2)ima[i]=-1;
	int m1=run(n1-one);
	int m2=run(n1);
	int mm=m1+m2+((one-m2)>>1);
	int ans=min(min(k,mm)+k,rn);
	printf("%d\n",ans);
}
int main()
{
	F(i,2,M)pri[i]=true;
	F(i,2,M)if(pri[i])for(int j=2*i;j<M;j+=i)pri[j]=false;
	int tt;read(tt);
	while(tt--)solve();
	return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 9ms
memory: 3848kb

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: 28ms
memory: 10324kb

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