USACO[19-20]Dec银组题解

1,MooBuzz

这题其实是道数学题。

我们先找找符合要求的数:1,2,4,7,8,11,13,14……

我们发现再往后找都是这8个数中的一个加15k如:16……19……29……

找规律发现k=n/8

ans=15*n/8+a[n%8](a[] = {14,1,2,4,7,8,11,13})

可我们发现n是8的倍数时会出错,特判一下当n%8==0时ans=15*n/8-1即可

#include 
#include 
using namespace std;
int n, d;
int a[8] = {14, 1, 2, 4, 7, 8, 11, 13};
int main() {
    freopen("moobuzz.in", "r", stdin);
    freopen("moobuzz.out", "w", stdout);
    cin >> n;
    d = n / 8;
    if (n % 8) {
        cout << d * 15 + a[n % 8];
    } else {
        cout << d * 15 - 1;
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

 持续更新ing

你可能感兴趣的:(USACO[19-20]Dec银组题解)