QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#360367#6512. Completely Multiplicative FunctionHanZhongBalls#RE 51ms4836kbC++142.3kb2024-03-21 18:12:312024-03-21 18:12:32

Judging History

你现在查看的是最新测评结果

  • [2024-03-21 18:12:32]
  • 评测
  • 测评结果:RE
  • 用时:51ms
  • 内存:4836kb
  • [2024-03-21 18:12:31]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> ii;
typedef vector<int> vi;
#define F first
#define S second
#define random(x) (rand() % (x))
#define LOG(a, b) (log(a) / log(b))
#define N 2000005
#define mod 998244353
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3fll
int n,k,dl,a[N],t,b[N];
int prime[N];//存放素数 
bool vis[N];//检验素数,vis[i]=0代表i是素数, vis[i]=1代表i不是素数 
void shai()
{
	t=0;//1是为了让p[1010]这个数组连续存放素数,自己定义的下标(不用i;
	vis[1]=1;
	for(int i=2;i<=n;++i) vis[i]=0;
			//2是为了记录素数个数,为后来的循环做条件。 
	for(int i=2;i<=n;i++)//这里定义的i,既是素数的来源(第13行),也是后面(第20行)用来筛合数的乘数 
	{
		//printf("##i=%d\n",i);
		if(vis[i]==0)//如果是i是素数 
		{
			prime[t]=i;//保存在p[]里 
			t++;
		}
		//printf("t=%d ",t-1);
		for(int j=0;j<t;j++)//开始筛 
		{
			//printf("##i=%d prime[j]=%d i*prime[j]=%d\n",i,prime[j],i*prime[j]);
			vis[prime[j]*i]=true;//把合数筛掉 
			if(i%prime[j]==0)//这里就是埃氏筛和欧拉筛不同之处,优化大多就靠这一条语句(后有证明 
				break;
		}
		//printf("\n------------\n");
	}
	//for(int i=0;prime[i]!=0;i++)//输出素数 
	//	printf("%d  ",prime[i]);
}
int calc(int x){
	int lv=0,ans=0;
	for(ll h=x;h<=n;h*=x,++lv){
		for(ll i=h;i<=n;i+=h){
			if(lv+b[i]&1){
				ans-=1;
			}else{
				ans+=1;
			}
		}
	}
	return ans;
}
void assign(int x){
	for(ll h=x;h<=n;h*=x){
		for(ll i=h;i<=n;i+=h){
			b[i]^=1;
		}
	}
}
int main(){
	int T,sq,cur,cnt;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&k);if((n-k)&1){puts("-1");continue;}dl=(n-k)>>1;
		shai();
		for(int i=1;i<=n;++i){
			sq=sqrt(i);
			if(sq*sq==i) continue;
			sq=sqrt(n/i);a[i]=sq;
			b[i]=0;
		}
		cur=0;
		for(int i=0;i<t;++i){
			cnt=calc(prime[i]);
			//printf("%d:%d\n",prime[i],cnt);
			if(cnt>0&&cur+cnt<=dl){
				assign(prime[i]);
				cur+=cnt;
			}
		}
		//printf("A%d %d\n",cur,dl);
		if(cur==dl){
			for(int i=1;i<=n;++i){
				if(b[i]) printf("-1 ");
				else printf("1 ");
			}
			puts("");
		}else{
			puts("-1");
		}
	}
	return 0;
}
/*
4
4 2
10 0
10 1
10 10
*/

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3876kb

input:

4
4 2
10 0
10 1
10 10

output:

1 -1 1 1 
1 -1 1 1 1 -1 -1 -1 1 -1 
-1
1 1 1 1 1 1 1 1 1 1 

result:

ok ok (4 test cases)

Test #2:

score: 0
Accepted
time: 22ms
memory: 3760kb

input:

11475
1 0
1 1
2 0
2 1
2 2
3 0
3 1
3 2
3 3
4 0
4 1
4 2
4 3
4 4
5 0
5 1
5 2
5 3
5 4
5 5
6 0
6 1
6 2
6 3
6 4
6 5
6 6
7 0
7 1
7 2
7 3
7 4
7 5
7 6
7 7
8 0
8 1
8 2
8 3
8 4
8 5
8 6
8 7
8 8
9 0
9 1
9 2
9 3
9 4
9 5
9 6
9 7
9 8
9 9
10 0
10 1
10 2
10 3
10 4
10 5
10 6
10 7
10 8
10 9
10 10
11 0
11 1
11 2
11 3
11...

output:

-1
1 
1 -1 
-1
1 1 
-1
1 -1 1 
-1
1 1 1 
1 -1 -1 1 
-1
1 -1 1 1 
-1
1 1 1 1 
-1
1 -1 -1 1 1 
-1
1 -1 1 1 1 
-1
1 1 1 1 1 
1 -1 1 1 -1 -1 
-1
1 -1 1 1 1 -1 
-1
1 1 1 1 -1 1 
-1
1 1 1 1 1 1 
-1
1 -1 1 1 -1 -1 1 
-1
1 -1 1 1 1 -1 1 
-1
1 1 1 1 -1 1 1 
-1
1 1 1 1 1 1 1 
1 -1 1 1 -1 -1 1 -1 
-1
1 -1 1 1 ...

result:

ok ok (11475 test cases)

Test #3:

score: 0
Accepted
time: 26ms
memory: 3876kb

input:

8825
151 0
151 1
151 2
151 3
151 4
151 5
151 6
151 7
151 8
151 9
151 10
151 11
151 12
151 13
151 14
151 15
151 16
151 17
151 18
151 19
151 20
151 21
151 22
151 23
151 24
151 25
151 26
151 27
151 28
151 29
151 30
151 31
151 32
151 33
151 34
151 35
151 36
151 37
151 38
151 39
151 40
151 41
151 42
151 ...

output:

-1
1 -1 -1 1 -1 1 -1 -1 1 1 1 -1 -1 1 1 1 1 -1 1 -1 1 -1 1 1 1 1 -1 -1 1 -1 1 -1 -1 -1 1 1 1 -1 1 1 1 -1 1 1 -1 -1 1 -1 1 -1 -1 -1 1 1 -1 1 -1 -1 1 1 1 -1 -1 1 1 1 1 1 -1 -1 1 -1 1 -1 -1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 1 1 -1 1 1 1 1 1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 -1 -...

result:

ok ok (8825 test cases)

Test #4:

score: 0
Accepted
time: 47ms
memory: 3856kb

input:

5675
201 1
201 3
201 5
201 7
201 9
201 11
201 13
201 15
201 17
201 19
201 21
201 23
201 25
201 27
201 29
201 31
201 33
201 35
201 37
201 39
201 41
201 43
201 45
201 47
201 49
201 51
201 53
201 55
201 57
201 59
201 61
201 63
201 65
201 67
201 69
201 71
201 73
201 75
201 77
201 79
201 81
201 83
201 85...

output:

1 -1 -1 1 -1 1 -1 -1 1 1 -1 -1 1 1 1 1 1 -1 1 -1 1 1 1 1 1 -1 -1 -1 1 -1 1 -1 1 -1 1 1 1 -1 -1 1 1 -1 1 -1 -1 -1 1 -1 1 -1 -1 1 1 1 1 1 -1 -1 1 1 1 -1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 -1 -1 1 1 1 1 -1 1 -1 1 1 -1 -1 -1 1 1 1 -1 1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 1 1 -1 -1 -...

result:

ok ok (5675 test cases)

Test #5:

score: 0
Accepted
time: 31ms
memory: 3808kb

input:

20000
100 15
90 62
96 81
98 52
93 86
91 60
96 50
96 71
96 85
97 88
94 72
100 76
98 75
93 81
100 93
98 13
96 47
96 25
100 21
94 46
100 75
90 66
91 89
100 33
98 73
92 61
96 57
97 11
97 92
98 49
90 11
100 21
99 32
99 48
96 87
90 15
99 67
99 14
94 90
94 30
94 56
93 66
98 16
99 52
90 63
95 3
97 53
100 58...

output:

-1
1 1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 -1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 1 1 -1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 1 1 1 1 -1 -1 1 1 1 1 1 1 -1 1 1 1 1 1 1 -1 1 1 1 1 1 1 
-1
1 1 1 1 -1 1 1 1 1 -1 -1 1 1 1 -1 1 1 1 1 -1 1 -1 1 1 1 1 1 1 1 -1 1 1 -1 1 -1 1 1 1 1 -1 1 1 1 -1 ...

result:

ok ok (20000 test cases)

Test #6:

score: 0
Accepted
time: 51ms
memory: 4836kb

input:

2000
949 642
993 9
982 214
953 437
930 248
958 429
908 294
918 155
901 704
979 943
914 603
932 75
937 638
973 793
942 933
924 146
945 221
927 415
963 818
974 483
911 538
977 900
967 875
973 473
929 575
956 657
911 864
925 221
968 271
984 427
918 165
901 222
902 207
973 573
924 672
933 398
915 742
93...

output:

-1
1 -1 -1 1 -1 1 -1 -1 1 1 -1 -1 -1 1 1 1 -1 -1 -1 -1 1 1 -1 1 1 1 -1 -1 1 -1 1 -1 1 1 1 1 1 1 1 1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 1 1 1 1 1 -1 1 1 1 -1 -1 1 1 -1 1 -1 1 -1 1 -1 1 -1 -1 -1 1 -1 1 -1 1 -1 1 1 1 -1 -1 1 1 1 1 -1 -1 -1 1 1 1 -1 -1 1 1 -1 1 1 -1 -1 1 -1 1 -1 -1 -1 1 -1 1 1 -1 -1 1 -1 1 -...

result:

ok ok (2000 test cases)

Test #7:

score: -100
Runtime Error

input:

200
9838 512
9347 1159
9523 2665
9663 3980
9571 5990
9753 7856
9971 4152
9134 2898
9998 1207
9979 6128
9529 3228
9712 186
9039 444
9889 4916
9913 8859
9017 2702
9009 5996
9530 7408
9796 4101
9012 6258
9640 387
9898 7876
9377 9261
9411 3253
9021 6315
9782 4053
9926 1466
9099 8288
9055 6535
9025 5135
...

output:


result: