QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#125236 | #6512. Completely Multiplicative Function | UNos_maricones | WA | 46ms | 3584kb | C++17 | 1.7kb | 2023-07-16 08:34:27 | 2023-07-16 08:34:30 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n, k;
scanf("%d %d", &n, &k );
if( ( n - k ) % 2 )
{
puts("-1");
return;
}
vector< bool > is_prime( n + 1, true );
vector< int > div( n + 1, -1 );
vector< int > primes;
for( int i = 2; i <= n; ++ i )
{
if( is_prime[ i ] )
{
primes.push_back( i );
for( int x = 2 * i; x <= n; x += i )
is_prime[x] = false, div[x] = i;
}
}
if( n <= 76 )//n is also small
{
vector< int > sp, gp;
for( auto p : primes )
{
if( 2 * p <= n ) sp.push_back( p );
else gp.push_back( p );
}
const int m = (int) sp.size();
const int del = (int) gp.size();
vector< int > f ( n + 1, 1 );
for( int mask = 0; mask < ( 1 << m ); ++ mask )
{
for( int i = 0; i < m; ++ i )
{
if( mask >> i & 1 )
f[sp[i]] *= -1;
}
for(int i = 2; i <= n; ++ i )
if( !is_prime[i] )
f[i] = f[div[i]] * f[i/div[i]];
int sum = 0;
for( int i = 1; i <= n; ++ i )
sum += f[i];
const int rem = sum - k;
if( rem >= 0 && rem <= 2 * del )
{
for( int i = 0; i < rem / 2; ++ i )
f[gp[i]] = -1;
for( int i = 1; i <= n; ++ i )
cout << f[i] << " \n"[i==n];
return;
}
}
puts("-1");
return;
}
int rem_minus = ( n - k ) / 2;
vector< int > f( n + 1, 1 );
for( auto p : primes )
{
if( 1LL * p * p > n && rem_minus >= ( n / p ) )
{
rem_minus -= ( n / p );
for( int i = 1; i * p <= n; ++ i )
f[i*p] *= -1;
}
}
for( int i = 1; i <= n; ++ i )
cout << f[i] << " \n"[i==n];
}
int main()
{
int t;
scanf("%d", &t );
while( t-- )
solve();
return 0;
};
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3584kb
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: 36ms
memory: 3536kb
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 1 -1 1 -1 -1 1 1 1 1...
result:
ok ok (11475 test cases)
Test #3:
score: -100
Wrong Answer
time: 46ms
memory: 3460kb
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:
wrong answer sum of f is not k (test case 2891)