求助,思路不一样,没过
查看原帖
求助,思路不一样,没过
521076
fes133楼主2022/11/17 22:43

代码如下

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

第八个没过

2022/11/17 22:43
加载中...