代码如下
#include <iostream>
#include <vector>
using namespace std;
// 小鱼的航程改进版P1424
typedef unsigned long long ull;
ull solution(int a,ull n){
int result;
// tab[n天 -1][周几 -1]
int tab[][7]= {{1,1,1,1,1,0,0},
{2,2,2,2,1,0,1},
{3,3,3,2,1,1,2},
{4,4,3,2,2,2,3},
{5,4,3,3,3,3,4},
{5,4,4,4,4,4,5},
{5,5,5,5,5,5,6}};
if(n<=7)return tab[n-1][a-1]*250;
if(n>7){
//设qa + qb + qc = n
// qa...头部的天数...查表
// qb...中间的天数 7的倍数
// qn...尾部的天数...查表(从周一开始)
//分四种情况,
//情况一:qa + qb = n
//情况二: qb = n
//情况三: qb + qn = n
//情况四: qa + qb + qn = n
//情况二、情况三
if(a==1)return (n/7*5+tab[n%7-1][0])*250;
//情况一、情况四
// qa + qx + qn = n
int qa = 8 - a;
int qn = (n - qa) % 7;
ull qb = n - qa - qn;
if(qb == 0) {//情况一
return (tab[qa - 1][a - 1] + qn ) * 250;
} else{//情况四
return (tab[qa - 1][a - 1] + qb / 7 * 5 + tab[qn - 1][0] ) * 250;
}
}
return result;
}
int main() {
int a;
unsigned long long n;
std::cin >> a >> n;
ull ans = solution(a,n);
std::cout<<ans<<std::endl;
return 0;
}
第八个没过