AtCoderで入茶を目指して勉強しています。
勉強を継続するために投稿を始めました。
もともとアカウントを作成していましたが、今年の4月から本格的に勉強を始めました。
一応自分用に解法を書いていますが雑です、自分で読み返して困ったら修正します。
私のアカウント
解いた問題
本日解いた問題
A - Raise Both Hands
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define mod 998244353
int main() {
int l, r;
cin >> l >> r;
if(l==1 && r==0){
cout << "Yes" << endl;
} else if(r==1 && l==0){
cout << "No" << endl;
} else {
cout << "Invalid" << endl;
}
}
解法
L=1, R=0
の場合、L=0, R=1
の場合、それ以外の場合で分けて考えることで結果がもとまる。
B - Binary Alchemy
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define mod 998244353
int main() {
int n;
cin >> n;
vector<vector<int>> a(n, vector<int>(0));
for(int i = 0; i < n; i++){
for(int j = 0; j <= i; j++){
int x;
cin >> x;
a[i].push_back(x);
}
}
int ele = 1;
for(int i = 0; i < n; i++){
if(ele-1 >= i){
ele = a[ele-1][i];
} else {
ele = a[i][ele-1];
}
}
cout << ele << endl;
}
解法
生成した元素と1からNまでの元素を合成し続けることで結果がもとまる。
C - Word Ladder
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define mod 998244353
int main() {
string s, t;
cin >> s >> t;
int sz = s.size();
vector<string> res;
while(t != s) {
string nex(sz, 'z');
for(int i = 0; i < sz; i++){
if(t[i] != s[i]){
string tmp = s;
tmp[i] = t[i];
nex = min(tmp, nex);
}
}
res.push_back(nex);
s = nex;
}
sz = res.size();
cout << sz << endl;
rep(i, sz) cout << res[i] << endl;
}
解法
T[i]!=S[i]
となるS[i]
を全てT[i]
に変換することで結果がもとまる。その際に操作後の文字列が辞書順で最小であるかを判定する。