結果

問題 No.2923 Mayor's Job
ユーザー tails
提出日時 2024-12-25 12:19:28
言語 C90
(gcc 12.3.0)
結果
AC  
実行時間 3 ms / 2,000 ms
コード長 1,400 bytes
コンパイル時間 970 ms
コンパイル使用メモリ 25,984 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-12-25 12:19:38
合計ジャッジ時間 1,552 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 17
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: In function ‘f2’:
main.c:7:59: warning: implicit declaration of function ‘write’ [-Wimplicit-function-declaration]
    7 | #define wt1(v) ({char wbuf[64],*wp=wbuf+sizeof wbuf;wt(v);write(1,wp,wbuf+sizeof wbuf-wp);})
      |                                                           ^~~~~
main.c:70:33: note: in expansion of macro ‘wt1’
   70 |                                 wt1(z);
      |                                 ^~~
main.c:71:33: warning: implicit declaration of function ‘_exit’ [-Wimplicit-function-declaration]
   71 |                                 _exit(0);
      |                                 ^~~~~
main.c:71:33: warning: incompatible implicit declaration of built-in function ‘_exit’ [-Wbuiltin-declaration-mismatch]

ソースコード

diff #

#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")

#define rd_init() char*rp=({char*mmap();mmap(0l,1l<<25,1,2,0,0ll);})
#define rd() ({int _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;})
#define wt(v) ({unsigned _z=v;do*--wp=_z%10+48;while(_z/=10);})
#define wt1(v) ({char wbuf[64],*wp=wbuf+sizeof wbuf;wt(v);write(1,wp,wbuf+sizeof wbuf-wp);})
#define rep(v,e) for(typeof(e)v=0;v<e;++v)
#define reps(v,s,e) for(typeof(e)v=s;v<e;++v)
#define repeat(e) for(typeof(e)_=e;_--;)

int n;
unsigned h[2000];
int x[2000];
int y[2000];
long k;

void f1(){
	rd_init();
	n=rd();
	k=rd();
	k*=k;
	rep(i,n){
		h[i]=rd();
	}
	rep(i,n){
		x[i]=rd();
		y[i]=rd();
	}
}

void fsort(){
	repeat(4){
		int c[256];
		for(int i=0;i<256;++i){
			c[i]=0;
		}
		for(int i=0;i<n;++i){
			++c[h[i]&255];
		}
		int t=0;
		for(int i=0;i<256;++i){
			int u=c[i];
			c[i]=t;
			t+=u;
		}
		unsigned ht[2000];
		int xt[2000];
		int yt[2000];
		for(int i=0;i<n;++i){
			int k=c[h[i]&255]++;
			ht[k]=h[i]>>8|h[i]<<24;
			xt[k]=x[i];
			yt[k]=y[i];
		}
		for(int i=0;i<n;++i){
			h[i]=ht[i];
			x[i]=xt[i];
			y[i]=yt[i];
		}
	}
}

void f2(){
	int z=n;
	int l=0;
	rep(i,n){
		for(;;++l){
			if(l==n){
				wt1(z);
				_exit(0);
			}
			if(h[l]!=h[i]){
				break;
			}
		}
		reps(j,l,n){
			long dx=x[j]-x[i];
			long dy=y[j]-y[i];
			if(dx*dx+dy*dy<=k){
				--z;
				break;
			}
		}
	}
}

int main(){
	f1();
	fsort();
	f2();
}
0