AtCoder Beginner Contest 143
はい. AtCoder Beginner Contest 143 です
今回は参加が遅れて,1時間以上経っていたので参加見送りました. 22:40 なった瞬間に解き始めました.
D までサクサク解けたので参加したかったです(:3」∠) 参加してたら多分 4完でした.
A - Curtain
長さ のカーテンが2枚あって の窓をどれくらい隠せるかという問題.
基本的には引くだけで,負数になる場合は0にする必要があります.
max 取れば終わりです.
#include <iostream> #include <algorithm> using namespace std; int main() { int a,b; cin >> a >> b; cout << max(0, a - 2*b); }
B - TAKOYAKI FESTIVAL 2019
が 50以下なので,(2重for文) で愚直に書いても通りそうですが,
どうしても にしたかったです.(しました)
#include <iostream> #include <vector> #include <numeric> #include <algorithm> using namespace std; int main() { int n; int ans = 0; cin >> n; vector<int> d(n); for (int i=0; i<n; i++) cin >> d[i]; int sum = accumulate(d.begin(), d.end(), 0); for (int i=0; i<n; i++) { ans += (sum-=d[i])*d[i]; } cout << ans << endl; }
C - Slimes
B より簡単なのでは…?
文字が切り替わる所を数えれば良いです.
最近,c=s[i], ans++
みたいな記法を知ったので使ってみました.
#include <iostream> #include <vector> #include <utility> #include <map> #include <algorithm> #include <queue> #include <cmath> using namespace std; int main() { int n; string s; cin >> n >> s; int ans = 0; char c = ' '; for (int i=0; i<n; i++) { if (c != s[i]) c=s[i],ans++; } cout << ans << endl; }
D - Disjoint Set of Common Divisors
ソートしておいて,大きい方から処理します.
2つのペアの差よりも小さいものは三角形になり得ないので,そこまでに含まれる個数を数えればOKです.
a < b + c b < c + a c < a + b
式からもテキトーに求められますね…
#include <iostream> #include <vector> #include <utility> #include <map> #include <algorithm> #include <queue> #include <cmath> using namespace std; int main() { int n; cin >> n; vector<int> l(n); for (int i=0; i<n; i++) cin>>l[i]; sort(l.begin(),l.end()); // for (auto i:l)cout<<i<<" ";cout<<endl; int ans = 0; for (int i=n-1; i>=0; i--) { for (int j=i-1; j>=0; j--) { auto it = upper_bound(l.begin(),l.end(), l[i]-l[j]); ans += max(0, (int)((l.begin()+j) - it)); } } cout << ans << endl; }
まとめ
出てたらパフォーマンス悪くなかったんじゃないかなぁ…
次の ABC144 頑張ります!