HDU 1214圓桌會議

2021-06-22 13:40:47 字數 1274 閱讀 9257

description

hdu acm集訓隊的隊員在暑假集訓時經常要討論自己在做題中遇到的問題.每當面臨自己解決不了的問題時,他們就會圍坐在一張圓形的桌子旁進行交流,經過大家的討論後一般沒有解決不了的問題,這也只有hdu acm集訓隊特有的圓桌會議,有一天你也可以進來體會一下哦:),在一天在討論的時候,eddy想出了乙個極為古怪的想法,如果他們在每一分鐘內,一對相鄰的兩個acm隊員交換一下位子,那麼要多少時間才能得到與原始狀態相反的座位順序呢?(即對於每個隊員,原先在他左面的隊員後來在他右面,原先在他右面的隊員在他左面),這當然難不倒其他的聰明的其他隊友們,馬上就把這個古怪的問題給解決了,你知道是怎麼解決的嗎? 

input

對於給定數目n(1<=n<=32767),表示有n個人,求要多少時間才能得到與原始狀態相反的座位順序(reverse)即對於每個人,原先在他左面的人後來在他右面,原先在他右面的人在他左面。 

output

對每個資料輸出一行,表示需要的時間(以分鐘為單位) 

sample input

456 

sample output

24 6

如果是所有人排列成一條直線,那麼移動的思想與氣泡排序一樣,總共需要n*(n-1)/2種方法,

求環形的逆序變換最小時間,因為環形是相互連線的,那麼只要將n劃分為最接近的兩個直線,

當這兩個劃分的直線逆序了。那麼整條環形便也逆序了。

設n為總長度,分為兩段,長度分別為a、b。總次數=a*(a-1)/2+b*(b-1)/2=a*(a-1)/2+(n-a)*(n-a-1)/2=(2*a^2-2*n*a+n^2)/2。

其中n為常量,a為變數。二次曲線開口向上,最小值對應的a=-(-2*n)/(2*2)=n/2。顯然a要求整數。

一條線上的n個人,123..n變為n..321,需要1+2+...+(n-1)=n*(n-1)/2次,即1右移n-1步,2右移n-2步..。而該題是圍成一圈,所以可以雙向移動, 因而將n分成兩部分,n/2和n-n/2,兩部分獨自逆序。可以達到時間最少。例1234,可分成12和34,2分鐘後可得到2143,由於成圈,所以也是逆序。

#includeusing namespace std;

int main()

{ int n,a,b;

while(cin>>n)

{ a=n/2;

b=n-a;

cout<

hdu 1214 圓桌會議

hdu acm集訓隊的隊員在暑假集訓時經常要討論自己在做題中遇到的問題.每當面臨自己解決不了的問題時,他們就會圍坐在一張圓形的桌子旁進行交流,經過大家的討論後一般沒有解決不了的問題,這也只有hdu acm集訓隊特有的圓桌會議,有一天你也可以進來體會一下哦 在一天在討論的時候,eddy想出了乙個極為古...

數論 HDU 1214 圓桌會議

hdu acm集訓隊的隊員在暑假集訓時經常要討論自己在做題中遇到的問題.每當面臨自己解決不了的問題時,他們就會圍坐在一張圓形的桌子旁進行交流,經過大家的討論後一般沒有解決不了的問題,這也只有hdu acm集訓隊特有的圓桌會議,有一天你也可以進來體會一下哦 在一天在討論的時候,eddy想出了乙個極為古...

hdu 1214 圓桌會議(規律)

problem descriptionhdu acm集訓隊的隊員在暑假集訓時經常要討論自己在做題中遇到的問題.每當面臨自己解決不了的問題時,他們就會圍坐在一張圓形的桌子旁進行交流,經過大家的討論後一般沒有解決不了的問題,這也只有hdu acm集訓隊特有的圓桌會議,有一天你也可以進來體會一下哦 在一天...