Codeforces Round #465 (Div. 2)
A - Fafa and his Company
n - i人をi個のグループに均等に分けられるiの数を求めればよいので,
(n - i) % iが0ならカウントする.
#include <bits/stdc++.h> using namespace std; int main(void) { int n; cin >> n; int count = 0; for(int i = 1; i <= n / 2; i++) { if((n - i) % i == 0) { count++; } } cout << count << endl; }
B - Fafa and the Gates
国境上にいた回数ではなく, 国境をまたいだ回数を求めるので,
i回移動した状態とi - 2回移動した状態それぞれで,
x[i] - y[i]
x[i - 2] - y[i - 2]
を計算し, 符号が違う場合はカウントする.
#include <bits/stdc++.h> using namespace std; int main(void) { int n; cin >> n; string s; cin >> s; int x[n], y[n]; x[0] = 0; y[0] = 0; for(int i = 0; i < n; i++) { if(s[i] == 'U') { y[i + 1] = y[i] + 1; x[i + 1] = x[i]; } if(s[i] == 'R') { x[i + 1] = x[i] + 1; y[i + 1] = y[i]; } } int count = 0; for(int i = 3; i <= n; i += 2) { if((x[i] - y[i] < 0 && x[i - 2] - y[i - 2] > 0) || (x[i] - y[i] > 0 && x[i - 2] - y[i - 2] < 0)) { count++; } } cout << count << endl; }
C - Fifa and Fafa
自力で解けず.
Wi-Fiの円の中心の座標の出し方がわからなかったけど,単にsin, cosと比を使えば出せますね.頑張りましょう.
Editorialにはコード例が無かったので以下の提出を解答代わりに読んだ.
http://codeforces.com/contest/935/submission/35484685
doubleの計算だから誤差を考慮しなければいけないと思ったけど
プロコンの実数計算はそんなに誤差気にしなくていいんですかね?
気に入った競プロerをお気に入り登録して提出をみれば答え合わせになってよいかもしれない.