ABC168自分なりのまとめ
A- ∴ (Therefore)
下一桁で条件分岐
もっと賢いやり方がありそうだけど、、、
//競技プログラミング用のテンプレート #include <iostream> #include <vector> #include <algorithm> #include <map> #include <queue> #include <string> #include <math.h> #include <stack> #include <limits> #define rep(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i) #define repr(i, n) for(int i = n - 1; i >= 0; i--) using namespace std; //エイリアス using ll = long long int; using p = pair<int, int>; using pl = pair<ll, ll>; using v = vector<int>; using vd = vector<double>; using vs = vector<string>; using vl = vector<ll>; //定数 const int intmax = numeric_limits<int>::max(); const ll llmax = numeric_limits<ll>::max(); const ll mod = 1e9 + 7; const double pi = M_PI; int main() { int n; cin >> n; string s = to_string(n); if(s[s.size() - 1] == '3') { cout << "bon" << endl; }else if(s[s.size() - 1] == '0') { cout << "pon" << endl; }else if(s[s.size() - 1] == '1') { cout << "pon" << endl; }else if(s[s.size() - 1] == '6') { cout << "pon" << endl; }else if(s[s.size() - 1] == '8') { cout << "pon" << endl; }else if(s[s.size() - 1] == '2') { cout << "hon" << endl; }else if(s[s.size() - 1] == '4') { cout << "hon" << endl; }else if(s[s.size() - 1] == '5') { cout << "hon" << endl; }else if(s[s.size() - 1] == '7') { cout << "hon" << endl; }else if(s[s.size() - 1] == '9') { cout << "hon" << endl; } }
B-... (Triple Dots)
長さ判定して、あとは適当に
//競技プログラミング用のテンプレート #include <iostream> #include <vector> #include <algorithm> #include <map> #include <queue> #include <string> #include <math.h> #include <stack> #include <limits> #define rep(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i) #define repr(i, n) for(int i = n - 1; i >= 0; i--) using namespace std; //エイリアス using ll = long long int; using p = pair<int, int>; using pl = pair<ll, ll>; using v = vector<int>; using vd = vector<double>; using vs = vector<string>; using vl = vector<ll>; //定数 const int intmax = numeric_limits<int>::max(); const ll llmax = numeric_limits<ll>::max(); const ll mod = 1e9 + 7; const double pi = M_PI; int main() { int k; cin >> k; string s; cin >> s; if (s.size() <= k) { cout << s << endl; }else{ cout << s.substr(0, k) << "..." << endl; } }
C- : (Colon)
悪夢のようなC問題
デジタル時計になれすぎたせいで、分針が動くと時針が動くことに気づけなくて解けなかった
それ以外は適当に三角関数を使って解けばいいです
余弦定理を知っていたらそれが一番楽
//競技プログラミング用のテンプレート #include <iomanip> #include <iostream> #include <vector> #include <algorithm> #include <map> #include <queue> #include <string> #include <math.h> #include <stack> #include <limits> #define rep(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i) #define repr(i, n) for(int i = n - 1; i >= 0; i--) using namespace std; //エイリアス using ll = long long int; using p = pair<int, int>; using pl = pair<ll, ll>; using v = vector<int>; using vd = vector<double>; using vs = vector<string>; using vl = vector<ll>; //定数 const int intmax = numeric_limits<int>::max(); const ll llmax = numeric_limits<ll>::max(); const ll mod = 1e9 + 7; const double pi = M_PI; int main() { int a, b, h, m; cin >> a >> b >> h >> m; double aarg = 30 * h + 0.5 * m; double barg = 6 * m; double x = aarg - barg; double arg = (double) (x) * pi / 180.0; double result = sqrt(a * a + b * b - 2 * a * b * cos(arg)); cout << fixed; cout << setprecision(9) << result << endl; }
D- .. (Double Dots)
これが本当に400点問題なのかと思うくらい簡単だった。
辺に重みが無いため幅優先探索で始点からの最短経路は全ノードについて求まります。
あとは、幅優先木の親に当たるノードの番号を各ノードについて覚えていけば良いです。
引っ掛けとして、できない場合は-1を出力するように言われていますが、非連結な要素がないため
上の解放で構成できない場合はありません。
//競技プログラミング用のテンプレート #include <iostream> #include <vector> #include <algorithm> #include <map> #include <queue> #include <string> #include <math.h> #include <stack> #include <limits> #define rep(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i) #define repr(i, n) for(int i = n - 1; i >= 0; i--) using namespace std; //エイリアス using ll = long long int; using p = pair<int, int>; using pl = pair<ll, ll>; using v = vector<int>; using vd = vector<double>; using vs = vector<string>; using vl = vector<ll>; //定数 const int intmax = numeric_limits<int>::max(); const ll llmax = numeric_limits<ll>::max(); const ll mod = 1e9 + 7; const double pi = M_PI; int main() { int n, m; cin >> n >> m; vector<vector<int>> graph(n, vector<int>()); rep(i, m) { int a, b; cin >> a >> b; graph[a - 1].push_back(b - 1); graph[b - 1].push_back(a - 1); } v parents(n, -1); auto bfs = [&](){ queue<int> q; vector<bool> flag(n, false); q.push(0); flag[0] = true; while(!q.empty()) { int cur = q.front(); q.pop(); for(int i = 0; i < graph[cur].size(); i++) { int next = graph[cur][i]; if(flag[next]) continue; q.push(next); flag[next] = true; parents[next] = cur; } } }; bfs(); cout << "Yes" << endl; rep(i, n - 1) cout << parents[i + 1] + 1 << endl; }
E-
//競技プログラミング用のテンプレート #include <iostream> #include <vector> #include <algorithm> #include <map> #include <queue> #include <string> #include <math.h> #include <stack> #include <limits> #define rep(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i) #define repr(i, n) for(int i = n - 1; i >= 0; i--) using namespace std; //エイリアス using ll = long long int; using p = pair<int, int>; using pl = pair<ll, ll>; using v = vector<int>; using vd = vector<double>; using vs = vector<string>; using vl = vector<ll>; //定数 const int intmax = numeric_limits<int>::max(); const ll llmax = numeric_limits<ll>::max(); const ll mod = 1e9 + 7; const double pi = M_PI; int main() { }