【ABC過去問演習】茶色埋め 3 日目
割り算はあまりやらないようにしようという話
解いた問題
- 7/11 ABC の 146C, 144D, 143D, 137C
- 7/12 ABC の 136D,133C
- 7/14 ABC の 131C, 131D, 130C
ABC 130 C 問題について
問題
リンク先参照
C - Rectangle Cutting
解き方
どの点を通る直線も長方形を半分に分割することができる。そして長方形の中心を通り、長方形を半分に分割する直線は2つある。よって かつ なら複数の直線を引けることになる。
ただ、最初は以下のようなコードのように かつ で if 文を作ってしまったために WA となってしまった。例えば , のときまずいことになるのがわかる。
WA したコード
#include<bits/stdc++.h> using namespace std; using ll = int64_t; int main(){ ll w,h,x,y;cin>>w>>h>>x>>y; bool ans=0; if(w/2==x&&h/2==y)ans=1; cout<<fixed<<setprecision(15)<<(double)w*h/2<<" "; cout<<ans<<endl; }
正しくは以下のコードのようにかけ算で条件分岐を書く。
AC したコード
#include<bits/stdc++.h> using namespace std; using ll = int64_t; int main(){ ll w,h,x,y;cin>>w>>h>>x>>y; bool ans=0; if(w==2*x&&h==2*y)ans=1; cout<<fixed<<setprecision(15)<<(double)w*h/2<<" "; cout<<ans<<endl; }
教訓
かけ算で済むならかけ算にしよう。割り算は極力やらないようにしよう。
進捗
がんばるぞい