QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#360367 | #6512. Completely Multiplicative Function | HanZhongBalls# | RE | 51ms | 4836kb | C++14 | 2.3kb | 2024-03-21 18:12:31 | 2024-03-21 18:12:32 |
Judging History
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
*/
Details
Tip: Click on the bar to expand more detailed information
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 ...