如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。
對於整點(x, y),我們定義它到原點的距離dis(x, y)是從原點到(x, y)的螺旋折線段的長度。
例如dis(0, 1)=3, dis(-2, -1)=9
給出整點座標(x, y),你能計算出dis(x, y)嗎?
【輸入格式】
x和y對於40%的資料,-1000 <= x, y <= 1000
對於70%的資料,-100000 <= x, y <= 100000
對於100%的資料, -1000000000 <= x, y <= 1000000000
【輸出格式】
輸出dis(x, y)
【樣例輸入】
0 1【樣例輸出】
3資源約定:
峰值記憶體消耗(含虛擬機器) < 256m
cpu消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。
注意:main函式需要返回0;
只使用ansi c/ansi c++ 標準;
不要呼叫依賴於編譯環境或作業系統的特殊函式。
所有依賴的函式必須明確地在原始檔中 #include
不能通過工程設定而省略常用標頭檔案。
提交程式時,注意選擇所期望的語言型別和編譯器型別。
#include#include //大小寫轉換transform(str.begin(), str.end(),str.begin()::tolower)
#include //平方pow(x,y);
#include//用於生產未知大小的一位陣列std::vectorarr
#include//堆疊 stackarr
#include//判斷資料型別isdigit(),islower(),isupper()
#include//字串
#include//rand()生成隨機值
#include //
using namespace std;
//下面的解法是一點點的找規律,總結出來的。有可能有些地方沒注意到。然後就是要注意x,y的正負,+-的情況好像有問題,還有資料會溢位。
long x, y;
long long sum = 0;
long long flag;
int main()
sum = sum + flag/2;
for (int i = 1; i < 2 * y; i++)
}else//y在下半軸 規律:x是累加到2y再加乙個y,y是累加到2y
sum = sum + abs(y);
for (int i = 1; i <= 2 * abs(y); i++)
}} if (y == 0)
sum = sum + flag/2;
for (int i = 1; i < 2 * x; i++)
sum += 2 * x;
}else//x在下半軸 規律:是在y在上半軸的情況下減2x
sum = sum + flag / 2;
for (int i = 1; i < 2 * abs(x); i++)
sum -= 2 * abs(x);
}} }
else//x和y不等於0
sum = sum + (x - y);
}else//x左半軸
sum = sum + abs(x) - 1 + y;
}} else//y下半軸
for (long long i = 1; i <= 2 * abs(y); i++)//規律:y是累加到2y,再減去乙個x
sum = sum + abs(y) - x;
}else//x左半軸
sum = sum + abs(y) + abs(x);
}} }
cout << sum << endl;
return 0;
}
藍橋 2023年省賽 螺旋折線
目測乙個找規律題目,不知道寫得對不對。規律還是蠻好找的 第一象限 包括x軸正半軸,y軸正半軸 以x,y相等的座標為基點,然後再根據所求點與基點的關係求得dis。第二,四象限亦是如此。稍微特殊的第三象限,也能較快地看出規律。在注釋中已經註明 include 藍橋 2018省賽 螺旋折線 long lo...
2018藍橋杯 ,螺旋折線與日誌統計
日誌統計 看資料範圍,應該會是乙個找規律的題,對於一些情況肯定會有乙個公式來計算。其次,需要注意資料範圍,涉及到大資料相乘,還是使用long long保險一點。思考 首先,對於每乙個外圍的小橫線,可以把他順時針旋轉90度,這樣就可以看成一些內部的正方形與外部邊長的問題了。對於內部的正方形,可以看出他...
第九屆藍橋杯省賽C B組 螺旋折線
如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出dis x,y 嗎?輸入格式 x和y 對於40 的資料,1000 x,...