根據題意,在等差數列 f(x)=2*x-1 中,選取盡可能少的元素,使得元素總和等於x。
若 (x+y) 不是平方數,或 x==2 ,或 y==2 ,那麼x、y不合法,輸出-1。
先在等差數列的後面幾項中,選取 f(down) ~ f(up),使得其和剛好不小於x。
若其和剛好等於x,那麼明顯就是這幾項。若大於x,則可以有某個元素不選,選取down項前面某個較小的元素,使得其和等於x。
值得注意的是,要判斷奇偶性。由於f(i)均為奇數,所以若選取的項數為奇數,而x為偶數,或者項數為偶數,x為奇數,是不符合條件的。要額外選取1個元素填補奇偶性的差異,即答案+1。
#include using namespace std;
int main()
up=min(num,(x+1)>>1);
down=(long long)sqrt(up*up-x)+1;
ans=up-down+1;
if( (((ans&1)==0)&&(x&1)==1) || ((ans&1)==1&&(x&1)==0))
ans++;
printf("%lld\n",ans);
}}
51nod 1390 遊戲得分
原題鏈結 1390 遊戲得分 topcoder 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 a與b兩人玩乙個遊戲,這個遊戲有若干個回合 可能0回合 遊戲的回合依次標號為1,2,3,4.你不需要關心遊戲的內容,現在只要知道第i回合勝者會獲得2 i 1分,每回合遊...
51Nod 1390 遊戲得分
1390 遊戲得分 topcoder 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 a與b兩人玩乙個遊戲,這個遊戲有若干個回合 可能0回合 遊戲的回合依次標號為1,2,3,4.你不需要關心遊戲的內容,現在只要知道第i回合勝者會獲得2 i 1分,每回合遊戲不存在平...
51nod 硬幣遊戲
有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況也算是相交 有時候不會。請你來計算一下拋一次硬幣之後,該硬幣和直線相交數目的期望。...