🔵
【ABC401】AtCoder Beginner Contest 401【C++】
コンテスト名
AtCoder Beginner Contest 401
コンテストURL
開催日
2025/04/12 21:00–22:40
A: Status Code
解法
- 問題文通りに判定する
ABC401A.cpp
#include <iostream>
using namespace std;
int main(){
int s;
cin >> s;
if(s>=200 && s<=299){
cout << "Success" << endl;
}else{
cout << "Failure" << endl;
}
return 0;
}
B: Unauthorized
解法
- ログイン状態について記録しておき、問題文通りに操作する
ABC401B.cpp
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin >> n;
bool flag = false;
string s;
int cnt = 0;
for(int i=0; i<n; i++){
cin >> s;
if(s=="login"){
flag = true;
}else if(s=="logout"){
flag = false;
}else if(s=="public"){
continue;
}else if(s=="private"){
if(!flag){
cnt++;
}
}
}
cout << cnt << endl;
return 0;
}
C: K-bonacci
解法
- 差分を利用する
-
のときK \leqq N -
のとき、i < K A_i = 1 A_K = K -
のとき、i > K A_i = A_{i-1} + A_{i-1} - A_{i-K-i}
-
-
のとき、K > N であることに注意するA_N = 1
ABC401C.cpp
#include <iostream>
#include <vector>
using namespace std;
long long int mod(long long int x, long long int m){
long long int res = x % m;
if(res<0){
res += m;
}
return res;
}
int main(){
int n, k;
cin >> n >> k;
if(k>n){
cout << 1 << endl;
return 0;
}
vector<long long int> A(n+1);
for(int i=0; i<k; i++){
A[i] = 1;
}
int j = 0;
A[k] = k;
for(int i=k+1; i<=n; i++){
A[i] = 2 * A[i-1] - A[j];
j++;
A[i] = mod(A[i], 1000000000);
}
cout << mod(A[n], 1000000000) << endl;
return 0;
}
Discussion