A問題
賞味期限を何日過ぎているのかは、$B - A$ で求められるので、それを用いて判定しましょう。
#include <bits/stdc++.h>
using namespace std; using ll = long long;
//Created by karaju.
signed main(void){
int x, a, b;
cin >> x >> a >> b;
int over = b - a;
//何日過ぎたかを表す変数
if(over > x){
cout << "dangerous" << endl;
}
else if(over > 0){
cout << "safe" << endl;
}
else{
cout << "delicious" << endl;
}
}
B問題
実際にボタンを押して何回か調べればよいです。
1回押したボタンをもう一度押すことになれば無限ループに陥るということがわかり、このことから答えは必ず$N$未満になるということがわかります。
なので、最大でも繰り返しを$N$回行えばいいです。
#include <bits/stdc++.h>
using namespace std; using ll = long long;
//Created by karaju.
signed main(void){
int n;
cin >> n;
int a[n + 1];
for(int i = 1; i < n; i++){
cin >> a[i];
}
int shine = 1;
//どこが光っているかを記録する変数
for(int i = 1; i < n; i++){
shine = a[shine];
if(shine == 2){
cout << i << endl;
//何回ボタンを押したかを出力
return 0;
}
}
cout << -1 << endl;
}
C問題
犬の方が1匹多い場合、犬猿犬猿...犬猿犬 と並べ替えられ、猿の方が1匹多い場合、猿犬猿犬...猿犬猿 と並び替えられます。
犬の数 と 猿の数 の差が2以上の場合、並べ方は0通りです。
犬の数 と 猿の数 が等しい場合、犬猿...犬猿 という並べ方と、猿犬...猿犬 という並べ方の二通りあります。
さて、ここからどのように並べ方の数を求められるかを考えます。
犬猿... か 猿犬... か決めると、
$全体の並べ方の数 = 犬の並べ方の数 \times 猿の並べ方の数$
と全体の並べ方の数は表せるので、それぞれの動物の並べ替え方を計算できればよいです。
$N$匹の動物の並び替え方は $N!$ 通りなので、全体の並び替え方は$N!M!$通りあります。
犬の数 と 猿の数 が等しい場合は、犬猿...犬猿 という並べ方と、猿犬...猿犬 という並べ方があるので、$2N!M!$通りなことに注意してください。
#include <bits/stdc++.h>
using namespace std; using ll = long long;
//Created by karaju.
ll MOD = 1000000007;
//10^9 + 7
ll factorial(ll a){ //階乗を計算する関数
ll b = 1;
for(int i = 1; i <= a; i++){
b *= i;
b %= MOD;
}
return b;
}
signed main(void){
ll n, m;
cin >> n >> m;
if(n == m){ //場合分け
cout << 2 * factorial(n) * factorial(m) % MOD << endl;
}
else if(abs(n - m) == 1){
cout << factorial(n) * factorial(m) % MOD << endl;
}
else{
cout << 0 << endl;
}
}