HDU-1214的題解
阿新 • • 發佈:2019-01-23
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("View Code%d\n",step); 15 } 16 return 0; 17 }
HDU-1214的題解