hntk03.com
Posts

AtCoder Beginner Contest 344 参加記録

2024/03/10

#競プロ

はじめに

AtCoder Beginner Contest 344に参加した記録です。 今回は、茶色パフォーマンスでした。

performance

A問題

文字列の先頭から|までの文字列と2個目の|から最後までを出力しました。

A.cpp
int main(void){
string S; cin >> S;
int first = S.find_first_of('|');
int last = S.find_last_of('|');
cout << S.substr(0, first) << S.substr(last+1) << endl;
return 0;
}

B問題

0が入力されるまで、値を読み込み、0が入力されたら、逆順にして出力しました。

B.cpp
int main(void){
vector<ll> A;
int a; cin >> a;
A.push_back(a);
if(a == 0){
cout << "0" << endl;
return 0;
}
while(true){
cin >> a;
A.push_back(a);
if(a == 0){
break;
}
}
reverse(A.begin(), A.end());
for(auto x : A){
cout << x << endl;
}
return 0;
}

C問題

すべてのパターンの和を計算しておき、その計算結果をmapに入れ、 各Xiがmap内にあるかで判定しました。

C.cpp
vector<ll> A, B, C, X;
map<ll, bool> mp;
bool dfs(int i, ll sum){
if(i == 0){
REP(j, A.size()){
if(dfs(i+1, sum+A[j])) return true;
}
}else if(i == 1){
REP(j, B.size()){
if(dfs(i+1, sum+B[j])) return true;
}
}else if(i == 2){
REP(j,C.size()){
if(dfs(i+1, sum+C[j])) return true;
}
}else{
mp[sum] = true;
}
return false;
}
int main(void){
int N; cin >> N;
REP(i, N){
ll tmp; cin >> tmp;
A.push_back(tmp);
}
int M; cin >> M;
REP(i,M){
ll tmp; cin >> tmp;
B.push_back(tmp);
}
int L; cin >> L;
REP(i,L){
ll tmp; cin >> tmp;
C.push_back(tmp);
}
int Q; cin >> Q;
REP(i,Q){
ll tmp; cin >> tmp;
X.push_back(tmp);
}
dfs(0, 0);
REP(i,Q){
if(mp[X[i]]) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}
← Back to All Posts