##はじめに
今回、AtCoderに初めて挑戦しました。
結果は6問中惨敗でした。
今までの軌跡はこちらにまとめています。
本家の解説はこちらです。
##αlphabet
問題はこちら。
これに対して自分の回答は以下です。
#include<iostream>
using namespace std;
int main()
{
char a, b, c;
cin >> a;
if(90 >= a && a >= 65)
cout << 'A' << endl;
else if(122 >= a && a >= 97)
cout << 'a' << endl;
return 0;
}
大文字と小文字は文字コードが連続しているので、それで判別しています。
本家の解説ではPythonでislower関数を使って、数行で済ませていました。
なんか、悔しいですね。
短い時間でコーディング量を減らすには、ある程度ライブラリ類を覚えておく必要がありますね。
##Mix Juice
問題はこちら。
これに対して自分の回答は以下です(不正解ですが・・・)。
#include<iostream>
#include<cmath>
#include <cstring>
using namespace std;
int main()
{
int n, k;
cin >> n >> k;
int* vals = new int[n];
int* comb = new int[k];
int tmp_val;
int min = 1000 * 1000;
int pattern = pow(n, k);
for(int i = 0; i < n; i++)
{
cin >> vals[i];
}
for(int i = 0; i < pattern; i++)
{
int tmp = i;
tmp_val = 0;
for(int j = 0; j < k; j++)
{
comb[j] = tmp % n;
tmp_val += vals[comb[j]];
tmp /= n;
}
bool flag = false;
for(int j1 = 0; j1 < k ; j1++)
{
for(int j2 = 0; j2 < k; j2++)
{
if(j1 == j2) continue;
if(comb[j1] == comb[j2])
{
flag = true;
break;
}
}
if(flag) break;
}
if(flag) continue;
if(min > tmp_val)
{
min = tmp_val;
}
}
cout << min << endl;
return 0;
}
コードが長いですね。
いい方法が思いつかず、全探索しています。
解説みると先にソートしてますね。言われてみれば確かに!という感じです。
ちなみに不正解の理由はよくわかってません・・・
##One Quadrillion and One Dalmatians
問題はこちら。
これに対して自分の回答は以下です(不正解ですが・・・)。
#include<iostream>
#include<sstream>
#include<algorithm>
using namespace std;
int main()
{
int n;
char c_base = 97;
stringstream name;
cin >> n;
int tmp = n - 1;
while(tmp >= 26)
{
char c = tmp % 26;
tmp /= 26;
name << (char)(c_base + c);
}
char c = tmp % 26;
name << (char)(c_base + c - 1);
string name2 = name.str();
reverse(name2.begin(), name2.end());
cout << name2 << endl;;
return 0;
}
26進数の問題ですね。
方向性は解説と一致していると思います。
ただ、自分の回答は桁上がりの前後で思った値にならず、不正解となっています。
落ち着けばすぐ直せたと思いますが、残り時間が少なくなるとパニックになりますね・・・
##残り
- Replacing
- Red Scarf
- Strivore
回答できず!