izumo’s diary

主に競プロの精進記録

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問題も少しずつ解けるようになりたいです。