USACO--combo

####Combination Lock####
簡述:
兩個密碼,旋轉的密碼盤,給出密碼盤的最大刻度,以及兩個密碼。在旋轉盤的過程中,每個密碼相差兩位之內都可以算作正確。

本來按照密碼,計算正確密碼就好了,不過我用的是算錯誤密碼,然後用所有的密碼減去就好了,不過要注意,如果刻度盤刻度較少不足5個的時候,需要額外考慮,此種特殊情況。

代碼:

#include <stdio.h>
#include <string.h>
#include <math.h>
int lock[2][3];
int n;

int rid();
int main(void)
{
    freopen("combo.in", "r", stdin);
    freopen("combo.out", "w", stdout);
    int i, j, sum = 250;
    scanf("%d", &n);
    //若給出的刻度範圍不及5;
    if(n < 5)sum = 2 * n * n * n;
    for(i = 0; i < 2; i++)
        for(j = 0; j < 3; j++)
            scanf("%d", &lock[i][j]);
    sum -= rid();
    printf("%d\n", sum);
    return 0;
}
int rid()
{
    int j;
    int c[3], sum = 0;
    memset(c, 0, sizeof(c));
    for(j = 0; j < 3; j++)
    {
        int a;
        a = lock[0][j] > lock [1][j] ? lock[0][j] - lock [1][j] : lock[1][j] - lock [0][j];
        if(a > n / 2)
            c[j] = n - a;
        else
            c[j] = a;
        if(c[j] >= 5)
            c[j] = 0;
        else
        {
            //若給出的刻度範圍不及5;
            if(n < 5)
                c[j] = n;
            else
                c[j] = 5 - c[j];
        }
    }
    for(j = 1, sum = c[0]; j < 3; j++)
        sum *= c[j];
    return sum;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章