OJ 1087 有趣的排列問題

2021-10-23 10:14:15 字數 897 閱讀 6935

描述

有n對雙胞胎,他們的年齡分別是1,2,3,……,n歲,他們手拉手排成一隊到野外去玩,要經過一根獨木橋,為了安全起見,要求年齡大的和年齡小的排在一起,好讓年齡大的保護年齡小的,然後從頭到尾,每個人報告自己的年齡,就得到了乙個年齡的序列。比如有4對雙胞胎,他們報出來的年齡序列是:41312432。突然,他們中間最聰明的小明發現了乙個有趣的現象,原來,這個年齡序列有乙個規律,兩個1中間有1個數,兩個2中間有2個數,兩個3中間有3個數,兩個4中間有4個數。但是,如果是2對雙胞胎,那麼無論他們怎麼排年齡序列,都不能滿足這個規律。

你的任務是,對於給定的n對雙胞胎,是否有乙個年齡序列,滿足這一規律,如果是,就輸出y,如果沒有,輸出n。

輸入共有若干行,每行乙個正整數n<100000,表示雙胞胎的數量;如果n=0,表示結束。

輸出共有若干行,每行乙個正整數,表示對應輸入行是否有乙個年齡序列,滿足這一規律,如果是,就輸出y,如果沒有,輸出n

輸入樣例 142

1309

0輸出樣例 1yn

n從題目中可以看到這個排列總共是有2n個資料,設x為1,2,3……n,那麼前乙個x(ax)和後乙個x(bx)的位置差為x+1;那麼會有sum(bx-ax)=2+~(n+1)=n*(n+1)/2+n;同時sum(ax+bx)=(1+2*n)*n;ax+bx=ax+ax+x+1;那麼sum(ax+bx)=2*sum(ax)+n*(n+1)/2+n;根據(1+2*n)*n=2*sum(ax)+n*(n+1)/2+n。可得sum(ax)=n*(3*n-1)/4;ax表示的是位置雖然不能確定具體位置,但是可以確定ax肯定是整數,所以得到n%4==0;並且3*n-1為整數

#include using namespace std;

int main()

return 0;

}

九度OJ 1087 約數的個數

題目1087 約數的個數 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 6056 解決 1838 題目描述 輸入n個整數,依次輸出每個數的約數的個數 輸入 輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n...

九度OJ 1087 約數的個數

這題的難點依然是在大資料的處理上,只要不儲存具體的因數及其冪次,而直接累乘到pro上即可。不贅述。題目描述 輸入n個整數,依次輸出每個數的約數的個數 輸入 輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n 0時輸入結束...

九度OJ 1087 約數的個數

題目1087 約數的個數 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 9528 解決 3154 題目描述 輸入n個整數,依次輸出每個數的約數的個數 輸入 輸入的第一行為n,即陣列的個數 n 1000 接下來的1行包括n個整數,其中每個數的範圍為 1 num 1000000000 當n...