結果
| 問題 |
No.1315 渦巻洞穴
|
| コンテスト | |
| ユーザー |
tails
|
| 提出日時 | 2020-12-13 01:43:35 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,194 bytes |
| コンパイル時間 | 157 ms |
| コンパイル使用メモリ | 33,408 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-19 22:41:01 |
| 合計ジャッジ時間 | 3,104 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 79 |
コンパイルメッセージ
main.c: In function 'locate':
main.c:7:20: warning: implicit declaration of function 'sqrt' [-Wimplicit-function-declaration]
7 | int r=(int)sqrt(s-1)+1&~1;
| ^~~~
main.c:1:1: note: include '<math.h>' or provide a declaration of 'sqrt'
+++ |+#include <math.h>
1 | #pragma GCC optimize("Ofast")
main.c:7:20: warning: incompatible implicit declaration of built-in function 'sqrt' [-Wbuiltin-declaration-mismatch]
7 | int r=(int)sqrt(s-1)+1&~1;
| ^~~~
main.c:7:20: note: include '<math.h>' or provide a declaration of 'sqrt'
main.c: In function 'move':
main.c:29:27: warning: multi-character character constant [-Wmultichar]
29 | *(int*)wp='RRLR';
| ^~~~~~
main.c:34:27: warning: multi-character character constant [-Wmultichar]
34 | *(int*)wp='LLRL';
| ^~~~~~
main.c:42:27: warning: multi-character character constant [-Wmultichar]
42 | *(int*)wp='DDUD';
| ^~~~~~
main.c:47:27: warning: multi-character character constant [-Wmultichar]
47 | *(int*)wp='UUDU';
| ^~~~~~
main.c: In function 'main':
main.c:55:9: warning: implicit declaration of function 'read' [-Wimplicit-function-declaration]
55 | read(0,buf,32);
| ^~~~
main.c:68:27: warning: multi-character character constant [-Wmultichar]
68 | *(int*)wp='LURL';
| ^~~~~~
main.c:73:27: warning: multi-character character constant [-Wmultichar]
73 | *(int*)wp='DLUR';
| ^~~~~~
main.c:75:27: warning: multi-character character constant [-Wmultichar]
75 | *(int*)wp='DU';
| ^~~~
main.c:86:9: warning: implicit declaration of function 'write' [-Wimplicit-function-declaration]
86 |
ソースコード
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#define RD(v) int v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;}
void locate(int s,int*px,int*py){
int r=(int)sqrt(s-1)+1&~1;
int r1=r>>1;
int t=(r+1)*(r+1)-s;
if(t<r){
*px=r1-t;
*py=r1;
}else if(t-=r,t<r){
*px=-r1;
*py=r1-t;
}else if(t-=r,t<r){
*px=-r1+t;
*py=-r1;
}else if(t-=r,1){
*px=r1;
*py=-r1+t;
}
}
char buf[200040],*wp;
void move(int x,int y){
while(x>0){
*(int*)wp='RRLR';
wp+=4;
x-=2;
}
while(x<0){
*(int*)wp='LLRL';
wp+=4;
x+=2;
}
if(x){
wp[-1]='U';++y;
}
while(y>0){
*(int*)wp='DDUD';
wp+=4;
y-=2;
}
while(y<0){
*(int*)wp='UUDU';
wp+=4;
y+=2;
}
--wp;
}
int main(){
read(0,buf,32);
char*rp=buf;
RD(s);
RD(t);
int sx,sy,tx,ty;
locate(s,&sx,&sy);
locate(t,&tx,&ty);
wp=buf+32;
if(s+t&1){
move(tx-sx,ty-sy);
}else if(s&1){
move(1-sx,0-sy);
*(int*)wp='LURL';
wp+=4;
move(tx-0,ty+1);
}else{
move(0-sx,0-sy);
*(int*)wp='DLUR';
wp+=4;
*(int*)wp='DU';
wp+=2;
move(tx-0,ty-0);
}
char*wp2=buf+32;
int n=wp-wp2;
*wp++='\n';
*--wp2='\n';
while(*--wp2=n%10+'0',n/=10);
*--wp2='\n';
*--wp2='0';
write(1,wp2,wp-wp2);
_exit(0);
}
tails