杭電2073(暴力解法)

由于看到群里同學(xué)的做法和自己的不一樣,所以打算將自己的代碼也放出來。
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2073
思路:看到這道題,我的第一想法就是找到這些坐標(biāo)點(diǎn)的規(guī)律,我將圖片上的點(diǎn)的坐標(biāo)依次寫在了草稿紙上,有:
0 0
0 1
1 0
0 2
1 1
2 0
0 3
1 2
2 1
3 0
我們將其分層,有
第一層:0 0
第二層:0 1
1 0
第三層:0 2
1 1
2 0
第四層:0 3
1 2
2 1
3 0
通過觀察可以發(fā)現(xiàn),x和y有這樣一個規(guī)律:
for (i = 0; i <= 200; i++)
{
for (j = 0; j <= i; j++)
{
x[k++] = j;
y[z++] = i - j;
}
}
于是,就有了如下代碼:

#pragma warning(disable:4996)
#include<stdio.h>
#include<math.h>
int main()
{
    int n, i, j,k=0,z=0;
    int x1, y1, x2, y2;
    int start, end;
    int x[40000], y[40000];
    double ans;
    for (i = 0; i <= 200; i++)//由于題目說明輸入數(shù)據(jù)不會超過一百,那就把要求范圍內(nèi)的所有點(diǎn)都先求出來
    {
        for (j = 0; j <= i; j++)
        {
            x[k++] = j;
            y[z++] = i - j;
        }
    }
    scanf("%d", &n);
    getchar();
    while (n--)
    {
        ans = 0;
        scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
        getchar();

        for (i = 0; i <= k; i++)
        {
            if (x1 == x[i] && y1 == y[i]) start = i;//找到開始的坐標(biāo)
            if (x2 == x[i] && y2 == y[i]) end = i;//找到結(jié)束的坐標(biāo)
        }
        if (end < start) 
        {
            end = end ^ start;
            start = start ^ end;
            end = end ^ start;      
        }
        for (i = start+1; i <= end; i++)//計算總的折現(xiàn)長度
        {
            ans += sqrt(pow(x[i] - x[i - 1],2) + pow(y[i] - y[i - 1],2));
        }
        printf("%.3lf\n", ans);
    }
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容