結果
| 問題 | 
                            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
            
            ソースコード
#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);
}
            
            
            
        
            
tails