ぽんこつ備忘録

自分用のWatsonやらAndroidやらやったことの備忘録 さぼりがち

AtCoderのABC参加してみた

就活も若干落ち着いたのでAtCoderに登録してみました。
競技プログラミングICPCにふわっと参加したことがある程度だったので
自身とか全くなかったけどとりあえずどこまでできるか腕試し

結果

ABは解けてCの解き方が全く分からず轟沈。
並みの情報系学生レベルですかね・・・できる人なら完答余裕なんでしょうけど・・・。

とりあえず解いた問題を整理していきます。

A問題

ビスケット生成装置を使って増産するシンプルな問題。
てっきりババァを増やして反物質を生成する問題かと思いました。クッキークリッカー久しぶりにやりてぇなぁ?
与えられる入力値はA B Tで、
A秒毎にB枚のビスケットをT+0.5秒間で何枚作れるか、とのこと。
単純にTをAで除算して出た結果×Bでいいのかな

#include<stdio.h>

int a[3];
int aa, b, c;
 
int main(void) {
	for (int i = 0; i < 3; i++){
		scanf("%d", &a[i]);
	}
	aa = a[2] / a[0];
	b = aa * a[1];
	printf("%d", b);
	return 0;
}

B問題

N個の宝石の中から価値が高いやつを任意の個数選んだり選ばなかったりして
最強のコスパを叩き出せ!って問題
最初は全通り計算する奴かな?とか頓珍漢な考えだったけど
普通に 宝石の価値 > コスト なものを全部選んで足せばいいだけやんってなるとあとは簡単
たぶん配列使ってうまく計算するんだろうけどその辺よくわからんからゴリラプレイ。

#include<stdio.h>
 
int a[20], b[20], c[20];
int asum = 0;
int bsum = 0;
int n;
int result;
 
int main(void) {
	scanf("%d", &n);
 
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	for (int i = 0; i < n; i++) {
		scanf("%d", &b[i]);
	}
	for (int i = 0; i < n; i++)
	{
		if (a[i] > b[i])c[i] = 1;
		else c[i] = 0;
	}
	for (int i = 0; i < n; i++)
	{
		if (c[i] == 1) {
			asum += a[i];
			bsum += b[i];
		}
	}
	result = asum - bsum;
	printf("%d", result);
	return 0;
}

あとがき

C,D問題はまだまだ歯が立ちませんでした・・・。
最大公約数を出すアルゴリズムを考えるところからだったのでまぁ無理だよね()
調べてみたら再起を使って2~4行できれいにまとめてるアルゴリズムもあってほえ~~~世界って広いなオラ、ワクワクすっぞ!
累積gcdとかぱっと思いつく発想力と既存の知識をうまく当てはめる柔軟性とが必要だなって思ったり
純粋なアルゴリズムを考える力だったり構造を把握する力をつけておかねばなぁと思うところ

就活でコーディングテストやったときは引っ掛け問題にうまく引っかかったとか
言われたから悔しかったしそれがどこかも教えてくれなかったから一生恨むわ御社ェ
こんなしょうもないところで躓いてお祈りとかほんとにもったいないから最低限のコードは書けるようになっておこうな!
・・・ワイのお祈りの理由はもっと別のところにあると思うけど・・・