結果
問題 | No.55 正方形を描くだけの簡単なお仕事です。 |
ユーザー |
![]() |
提出日時 | 2021-02-16 13:17:33 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 1 ms / 5,000 ms |
コード長 | 2,351 bytes |
コンパイル時間 | 502 ms |
コンパイル使用メモリ | 33,664 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-12 23:32:37 |
合計ジャッジ時間 | 1,649 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 21 |
ソースコード
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>// Yukicoder №55 正方形を描くだけの簡単なお仕事です。 ★★// https://yukicoder.me/problems/no/55// ***********************#define PRINCR do{printf("\n");fflush(stdout);}while(0)#define GETLINE(str) do{char *p;fgets(str,sizeof(str),stdin);p=strchr(str,'\n');if(p)*p='\0';}while(0)#define REP(a,b) for(int a=0;a<(int)(b);++a)static char *GETWORD(char* str) {char c;char *cp;cp=&str[0];c=fgetc(stdin);while( c != EOF ){if((c==' ')||( c=='\n')) break;*cp++=c;c=fgetc(stdin);}*cp='\0';return &str[0];}#define GETINTS(a,b) {char s[34];int *ap=a;REP(i,b){GETWORD(s);sscanf(s,"%d", ap);ap++;}}static int GETLINEINT(void) {char s[34];GETLINE(s);return atoi(s);}static int GETWORDINT(void) {char s[34];GETWORD(s);return atoi(s);}#define SWAP(type,a,b) do{type _c;_c=a;a=b;b=_c;}while(0)#define PI ((double)3.141592653589793238462643383279)typedef struct HOGE {int x;int y;} SQUARE;SQUARE PT[4];double mySqrt(double x){double s,last;if(x<=0.0) return 0.0;if (x > 1) s = x; else s = 1;do {last = s;s = (x / s + s) * 0.5;} while (s < last);return last;}int main() {double ab,bc;REP(i,3) {PT[i].x = GETWORDINT();PT[i].y = GETWORDINT();}REP(k,3) {ab = (PT[0].x-PT[1].x) * (PT[0].x-PT[1].x);ab += (PT[0].y-PT[1].y) * (PT[0].y-PT[1].y);bc = (PT[1].x-PT[2].x) * (PT[1].x-PT[2].x);bc += (PT[1].y-PT[2].y) * (PT[1].y-PT[2].y);if( ab == bc ) {// 90度か?ab = atan2( PT[0].y - PT[1].y , PT[0].x - PT[1].x ) * 180. / PI + 1.;while( ab < 0 ) ab += 180.;bc = atan2( PT[2].y - PT[1].y , PT[2].x - PT[1].x ) * 180. / PI + 1.;while( bc < 0 ) bc += 180.;if( ab > bc ) SWAP(double,ab,bc);{int cc;cc = ab;ab = cc;cc = bc;bc = cc;}bc = bc - ab -90;if( abs((int)bc) < 2 ) {ab = bc;break;}//printf( "%f:%f", ab, bc );}for(int i=2; i >= 0; --i ) {PT[i+1].x = PT[i].x;PT[i+1].y = PT[i].y;}PT[0].x = PT[3].x;PT[0].y = PT[3].y;}if( ab == bc ) {PT[3].x = PT[2].x + ( PT[0].x - PT[1].x );PT[3].y = PT[2].y + ( PT[0].y - PT[1].y );printf("%d %d\n", PT[3].x, PT[3].y );} else {printf("%d\n", -1 );}return 0;}