# Gori#019(ABC039)
# B - エージェント高橋君
# 概要
となるようなを求めよ.
# 解法
そのまま.
#include <bits/stdc++.h>
using namespace std;
int main() {
int X; cin >> X;
cout << sqrt(sqrt(X)) << endl;
return 0;
}
# C - ピアニスト高橋君
# 概要
ピアノの鍵盤は, = WBWBWWBWBWBWWBWBWWBW
という順番になっている.
ここで, 今いる鍵盤から右20個分の文字列が与えられた時, 今どの鍵盤にいるか求めよ.
# 解法
の長さは高々20文字なので, ずらす数をインデクスとしてと鍵盤の文字列が等しくなる部分を求めれば良い.
#include <bits/stdc++.h>
using namespace std;
int main() {
string base = "WBWBWWBWBWBW";
string ans[7] = {"Do", "Re", "Mi", "Fa", "So", "La", "Si"};
string s; cin >> s;
string ret;
for(int bi=0; bi<base.size(); ++bi) {
for(int si=0; si<s.size(); ++si) {
if (base[(bi+si)%base.size()] != s[si]) break;
if (si == s.size()-1) {
switch(bi){
case 0:ret = ans[0];break;
case 2:ret = ans[1];break;
case 4:ret = ans[2];break;
case 5:ret = ans[3];break;
case 7:ret = ans[4];break;
case 9:ret = ans[5];break;
case 11:ret = ans[6];break;
}
cout << ret << endl;
return 0;
}
}
}
return 0;
}
# D - 画像処理高橋君
# 概要
ある2値画像が存在する.
この画像の#
の画素を周囲の8画素に拡張したの2値画像が与えられる.
元の画像を復元せよ.
# 解法
#
を拡張するという操作の逆は, .
を拡張するという操作である.
したがって, 逆の操作を1回行った文字列を作成することで復元画像が生成される.
その復元画像を改めて操作し, 最初に与えられた画像と等しくなることを確認すれば良い.
#include <bits/stdc++.h>
using namespace std;
int dx[8]={1, 1, 0, -1, -1, -1, 0, 1};
int dy[8]={0, 1, 1, 1, 0, -1, -1, -1};
int main() {
int h,w;
cin >> h >> w;
vector< string > s(h);
for(int hi=0;hi<h;++hi) cin >> s[hi];
vector< string > ans(s);
for(int hi=0;hi<h;++hi){
for(int wi=0;wi<w;++wi){
if (s[hi][wi] != '.') continue;
for (int di=0;di<8;++di){
int ny = hi+dy[di], nx = wi+dx[di];
if (!(0 <= ny && ny < h && 0 <= nx && nx < w)) continue;
ans[ny][nx] = '.';
}
}
}
vector< string > debug(ans);
for(int hi=0;hi<h;++hi){
for(int wi=0;wi<w;++wi){
if (ans[hi][wi] != '#') continue;
for (int di=0;di<8;++di){
int ny = hi+dy[di], nx = wi+dx[di];
if (!(0 <= ny && ny < h && 0 <= nx && nx < w)) continue;
debug[ny][nx] = '#';
}
}
}
bool ok = true;
for(int hi=0;hi<h;++hi){
for(int wi=0;wi<w;++wi){
ok &= s[hi][wi] == debug[hi][wi];
}
}
if (ok) {
cout << "possible" << endl;
for(int hi=0;hi<h;++hi){
cout << ans[hi] << endl;
}
} else {
cout << "impossible" << endl;
}
return 0;
}
以上.
お疲れ様でした.