1. 程式人生 > >HDU-1214的題解

HDU-1214的題解

ron 其他 技術 如果 aps 圖片 amp esc 題目

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

Input

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

t對每個數據輸出一行,表示需要的時間(以分鐘為單位)
Sample Input

4
5
6

Sample Output

2
4
6

題目思路:只需要把原來順時針的順序變成逆時針就好了:比如說順時針a,b,c中b只要跨過a就完成了目的變成逆時針abc;再比如a,b,c,d,e中b跨過a(共1步),c跨過a和b(c也可以跨過d和e(一樣近)),d再跨過e(共4步)。目的就達到了。

技術分享圖片
 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int n,step=0;
 6     while(scanf("%d",&n)!=EOF)
 7     {
 8     step=0; 
 9     for(int i=2;i<=n;i++)
10     {
11         if(i-1<n-i)step+=(i-1);//不管跨哪邊,按離他的換位後最近的方向跨
12         else step+=(n-i);
13     }
14     printf("
%d\n",step); 15 } 16 return 0; 17 }
View Code

HDU-1214的題解