程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> zoj 1730 / poj 1455 Crazy Tea Party

zoj 1730 / poj 1455 Crazy Tea Party

編輯:C++入門知識

這陣子都沒怎麼寫代碼,由於開學,忙於各種瑣碎的事情,現在靜下來了開始跟著暑假的節奏刷題了。         這道題一開是沒看清題目~在寢室刷題就是效率不高。。。         後來才知道,題目意思是,一個環形序列,1minute可以交換相鄰的兩個位置,問逆序所需的最小時間是多少。         如果不是環形的話那就好辦了,就是個冒泡。         非環形時:                如 n = 5 : 1 2 3 4 5                所需時間為:n*(n-1)/2 = 10         環形時:                如 n = 5 :1 2 3 4 5                可將 n拆分成2 + 3                        1 2 和 3 4 5                可用4部將其逆序                         1:2 1 和 3 4 5                         2:2 1 和 4 3 5                         3:2 1 和 4 5 3                         4:2 1 和 5 4 3                 由於其為環形,故至此完成逆序操作                 所以這題就變得十分簡單了,time =    n/2*(n/2 - 1)/2 + (n+1)/2* ((n+1)/2 - 1)/2         

#include<iostream>  
using namespace std;  
int main(void)  
{  
    int n,ncases;  
    cin>>ncases;  
    while(ncases--)  
    {  
    cin>>n;  
    cout<<(n/2*(n/2-1)/2+(n+1)/2*((n+1)/2-1)/2)<<endl;  
    }  
    return 0;  

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved