C - 風力観測

cpatcoderjust dodiff experimentaldiff green

最終更新日

Table of Contents

Loading...

問題

https://atcoder.jp/contests/abc001/tasks/abc001_3 (新しいタブで開く)

問題文

風向と風程が与えられるので、気象形式に直してね。

方位角度 (左端含む・右端含まない)
N348.75 - 11.25
NNE11.25 - 33.75
NE33.75 - 56.25
ENE56.25 - 78.75
E78.75 - 101.25
ESE101.25 - 123.75
SE123.75 - 146.25
SSE146.25 - 168.75
S168.75 - 191.25
SSW191.25 - 213.75
SW213.75 - 236.25
WSW236.25 - 258.75
W258.75 - 281.25
WNW281.25 - 303.75
NW303.75 - 326.25
NNW326.25 - 348.75
C風力 0
風力風速 (両端含む)
00.0 - 0.2
10.3 - 1.5
21.6 - 3.3
33.4 - 5.4
45.5 - 7.9
58.0 - 10.7
610.8 - 13.8
713.9 - 17.1
817.2 - 20.7
920.8 - 24.4
1024.5 - 28.4
1128.5 - 32.6
1232.7 -

サンプル

I/O 1

2750 628

風向: 275.0 度; 風程: 628m/min

W 5

I/O 2

161 8
C 0

I/O 3

3263 15
NNW 1

I/O 8 まであるけど略。

考察

場合分けが面倒だけど、やるだけ。
そのまま秒速に直すと誤差が生じかねないので、風力のほうを分速にしておく。

コード

https://atcoder.jp/contests/abc001/submissions/27938477 (新しいタブで開く)

int main() { int deg, dis; cin >> deg >> dis; if (dis < 15) { printf("C 0\n"); return 0; } { if (deg <= 112) printf("N"); else if (deg <= 337) printf("NNE"); else if (deg <= 562) printf("NE"); else if (deg <= 787) printf("ENE"); else if (deg <= 1012) printf("E"); else if (deg <= 1237) printf("ESE"); else if (deg <= 1462) printf("SE"); else if (deg <= 1687) printf("SSE"); else if (deg <= 1912) printf("S"); else if (deg <= 2137) printf("SSW"); else if (deg <= 2362) printf("SW"); else if (deg <= 2587) printf("WSW"); else if (deg <= 2812) printf("W"); else if (deg <= 3037) printf("WNW"); else if (deg <= 3262) printf("NW"); else if (deg <= 3487) printf("NNW"); else printf("N"); } printf(" "); { if (dis < 93) printf("1"); else if (dis < 201) printf("2"); else if (dis < 327) printf("3"); else if (dis < 477) printf("4"); else if (dis < 645) printf("5"); else if (dis < 831) printf("6"); else if (dis < 1029) printf("7"); else if (dis < 1245) printf("8"); else if (dis < 1467) printf("9"); else if (dis < 1707) printf("10"); else if (dis < 1959) printf("11"); else printf("12"); } printf("\n"); return 0; }