ぐってぃのプログラミング日記

競技プログラミングやIT関係の記事を書いていくよ

AtCoder Beginner Contest 120

A問題

b ÷ aがcより少なければb ÷ a 出力
それ以外ならcで満足するのでcを出力

#include <iostream>
#include <numeric>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <math.h>
#include <cmath>
#include <set>   
#include <bitset>
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <queue>
#include <boost/math/common_factor_rt.hpp>

#define ll long long
using namespace std;
ll l = 1000000007;

int main()
{
	int a, b, c;
	cin >> a >> b >> c;

	if (c < b / a) {
		cout << c << endl;
	}
	else {
		cout << b / a << endl;
	}
	
}

B問題

AとBを素因数分解して同じ数字を取り出して配列にいれる。
降順に並べて配列のK-1番目を出力すればおけ

考察すぐできたのに実装が重すぎる・・

#include <iostream>
#include <numeric>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <math.h>
#include <cmath>
#include <set>   
#include <bitset>
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <queue>
#include <boost/math/common_factor_rt.hpp>

#define ll long long
using namespace std;
ll l = 1000000007;
vector<int> a[1000] = {};
vector<int> b[1000] = {};
vector<int> ans[1000] = {};


int main()
{
	int A, B, K;
	cin >> A >> B >> K;

	a->push_back(1);
	b->push_back(1);



	int x = A;
	int y = B;

	for (int i = 2; i <= A; i++) {
		if(A%i == 0) { 
			a->push_back(i);
		}
	}

	for (int i = 2; i <= B; i++) {
		if (B%i == 0) { 
			b->push_back(i);
		}
	}
	
	if (a->size() >= b->size()) {
		for (int i = 0; i < a->size(); i++)
		{
			for (int j = 0; j < b->size(); j++)
			{
				if (a->at(i) == b->at(j)) {
					ans->push_back(a->at(i));
				}
			}
		}
	}
	else {
		for (int i = 0; i < b->size(); i++)
		{
			for (int j = 0; j < a->size(); j++)
			{
				if (b->at(i) == a->at(j)) {
					ans->push_back(b->at(i));
				}
			}
		}
	}
	
	int s = ans->size() - 1;
	sort(ans->begin(), ans->end(), greater<int>());

	cout << ans->at(K - 1) << endl;
}

C問題

01か10の場合どっちを消せばいいのかみたいな判定いるかと思ったけど、
箱をソートしてしまえば最も多く消せる数値がわかる。
出力は赤と青で少ない方の2倍を出力すればおけ
なんだか簡単だし嘘解法な気する。

#include <iostream>
#include <numeric>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <math.h>
#include <cmath>
#include <set>   
#include <bitset>
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <queue>
#include <boost/math/common_factor_rt.hpp>

#define ll long long
using namespace std;
ll l = 1000000007;
vector<char> s;

int main()
{
	ll z = 0, o = 0;
	string S;
	cin >> S;
	for (ll i = 0; i < S.size(); i++)
	{
		s.push_back(S.at(i));
	}
	for (ll i = 0; i < s.size(); i++)
	{
		if (s.at(i) == '0') {
			z++;
		}
		else {
			o++;
		}
	}
	
	if (z >= o) {
		cout << o * 2 << endl;
	}
	else {
		cout << z * 2 << endl;

	}

}

Dはわからず・・・
C問題安定してきた