結果

問題 No.1530 Permutation and Popcount
ユーザー tails
提出日時 2021-06-04 21:18:54
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 49 ms / 2,000 ms
コード長 1,382 bytes
コンパイル時間 1,268 ms
コンパイル使用メモリ 32,512 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-24 20:35:38
合計ジャッジ時間 3,377 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 41
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c:21:1: warning: return type defaults to 'int' [-Wimplicit-int]
   21 | main(){
      | ^~~~
main.c: In function 'main':
main.c:23:9: warning: implicit declaration of function 'read'; did you mean 'rd'? [-Wimplicit-function-declaration]
   23 |         read(0,rbuf,sizeof rbuf);
      |         ^~~~
      |         rd
main.c:37:17: warning: implicit declaration of function 'write' [-Wimplicit-function-declaration]
   37 |                 write(1,"-1\n",3);
      |                 ^~~~~
main.c:38:17: warning: implicit declaration of function '_exit'; did you mean '_Exit'? [-Wimplicit-function-declaration]
   38 |                 _exit(0);
      |                 ^~~~~
      |                 _Exit

ソースコード

diff #
プレゼンテーションモードにする

#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#define rd_skip() while(*rp++>=48)
#define rd(v) int v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;}
char wbuf[1<<25];
#define WTHI(v) {long _z=v,_n=0,_d=0;while(++_n,_d=_d<<8|0x30|_z%10,_z/=10);*(long*)wp=_d;wp+=_n;}
#define WTLO(v) {long _z=v,_n=8,_d=0;while(_d=_d<<8|0x30|_z%10,_z/=10,--_n);*(long*)wp=_d;wp+=8;}
#define wt(v) WTHI(v)
int count[301];
int total;
typedef struct {
int a[10];
} Bits;
Bits dp[200000];
main(){
char rbuf[64];
read(0,rbuf,sizeof rbuf);
char*rp=rbuf;
rd(n);
rd(m);
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
int p=!__builtin_parity(i*j);
count[i]+=p;
total+=p;
}
}
if((total^m)&1 || m>total){
write(1,"-1\n",3);
_exit(0);
}
m=total-m>>1;
for(int k=1;k<=m;++k){
dp[k].a[9]=-1;
}
for(int i=1;i<=n;++i){
for(int k=m;k>=count[i];--k){
Bits b=dp[k-count[i]];
if(b.a[9]>=0){
b.a[i>>5]|=1<<i;
dp[k]=b;
}
}
}
if(dp[m].a[9]<0){
write(1,"-1\n",3);
_exit(0);
}
int yn=0;
for(int j=0;j<10;++j){
yn+=__builtin_popcount(dp[m].a[j]);
}
char*wp=wbuf;
wt(n-yn);
*wp++=' ';
wt(yn);
*wp++='\n';
for(int i=1;i<=n;++i){
if(!(dp[m].a[i>>5]&1<<i)){
wt(i);
*wp++=' ';
}
}
wp[-1]='\n';
for(int i=1;i<=n;++i){
if(dp[m].a[i>>5]&1<<i){
wt(i);
*wp++=' ';
}
}
wp[-1]='\n';
write(1,wbuf,wp-wbuf);
_exit(0);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0