AtCoder Beginner Contest 093
ブログを始めてみました!競技プログラミング(主にAtCoder)の参加記などを書く予定です。現状、AtCoderのパフォーマンスは茶色か緑です。半年後とかに読んで成長が感じられたら良いなと思います。
今回はABC093の参加記です。結果はA, B, Cの3完でした。
使用言語: C++
A - abc of ABC
A問題だからループもソートも使わなくて解けるはず……だが悩んでいる時間が惜しいので入力をソートしてabcか判定。
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){ string s; cin>>s; sort(begin(s), end(s)); s=="abc" ? cout<<"Yes"<<endl : cout<<"No"<<endl; return 0; }
B - Small and Large Integers
AからK個、B-K+1からK個の整数を出力するだけ。ただし、AとBの間に2K個以上整数が存在しないときはAからBまでのすべての整数を出力する。
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){ int a, b, k, i; cin>>a>>b>>k; if((b-a+1)<2*k){ for(i=a; i<=b; i++) cout<<i<<endl; } else{ for(i=0; i<k; i++) cout<<a+i<<endl; for(i=0; i<k; i++) cout<<b-k+1+i<<endl; } return 0; }
C - Same Integers
問題文の1つ目の操作はA, B, Cのうち1つ選んで、その整数を1減らすと言い換えることができる。よって2つ目の操作を主に行い、最後の調整に1つ目の操作を行えば良い。この最後の調整を間違えて20分くらい損をした。アホすぎる。
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){ int x, y; int a[10]; cin>>a[0]>>a[1]>>a[2]; sort(a, a+3); x=a[2]-a[0]; y=a[2]-a[1]; if(x%2==0 && y%2==0){ cout<<x/2+y/2<<endl; return 0; } if(x%2==0 || y%2==0){ cout<<(x+1)/2+(y+1)/2+1<<endl; return 0; } else{ cout<<x/2+y/2+1<<endl; return 0; } }
D - Worst Case
700点問題なので開始前から解けないだろうなと思っていたが、やはり無理だった。そもそも問題文を理解するのに時間がかかった。出力例1で、(3, 1)の人とかは違うの……って悩んでいた。
感想
700点問題は無理だと思っていたので3完は想定通りでした。蟻本を始めるのでD問題も少しずつ解けるようになりたいです。