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;
  }
  
}
