日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 631 冬季长跑

發布時間:2025/3/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 631 冬季长跑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冬季長跑

時間限制:5000?ms ?|? 內存限制:65535?KB 難度:4 描述

為了增強大學生的身體素質,校長決定進行冬季長跑。有N個班級要參加冬季長跑,班級的編號從1到N。聽說這個消息之后學生們馬上都集中到體育場上。但是,由于學生們來的匆忙,所以并不是按照學號排列的。這樣很混亂,所以要讓他們調整位置按學號排列。為了防止調整過程出現混亂,校長要求,每個班級每次只能找相鄰的兩個人交換位置。我們認為每次交換都需要花費10秒時間。當然,每個班級都會采取最快的方案交換完畢,在整理好隊列后就立即出發。由于每個班級要整理隊列的時間不同,所以校長決定要將長跑的N個班級分成若干小組,每個小組中的班級利用一條跑道。在每個跑道上的班級必須滿足,前面的班級的編號小于后面的班級的編號。在調整隊列之前,我們的校長想知道,最少需要用到多少條跑道。

注意:同時出發的兩個班級不可以在同一條跑道上。?

樣例Hint

說明:班級1、2、3調整所需時間分別為0s、30s、10s,所以至少需要兩條跑道,有兩種可能:1、2共用一條跑道,3單獨一條;或者1、3共用一條跑道,2單獨一條。?

輸入
一個整數T表示測試組數。

對于每組測試數據:

首先、一個整數N代表班級的個數。

然后、后面有N行,每行代表一個班級。每行由一個整數Mi和后面的Mi個整數。其中Mi是班級i的人數,后面的Mi是未排隊之前的班級i的學號隊列,范圍1~Mi。
輸出
對于每組數據,輸出一個整數K,代表最少的跑道數。每組輸出各占一行。


數據范圍:
1 <= T <= 10
1 <= N <= 50000
1 <= Mi<= 20
樣例輸入
1 3 3 1 2 3 3 3 2 1 3 2 1 3
樣例輸出
2
樹狀數組求逆序數+單調遞增子序列!
當然也可以用歸并排序求逆序數!
本題應用樹狀數組求逆序數的好處:因為是學生學號,學號比連續,因此不需要考慮離散化,也不需要考慮去重!
AC碼:
#include<stdio.h> #include<string.h> int num[25],m; int sum[50005]; int lowbit(int i) {return i&(-i); } void update(int i) {while(i<=m){num[i]+=1;i+=lowbit(i);} } int get(int i) {int result=0;while(i>0){result+=num[i];i-=lowbit(i);}return result; } int main() {int T,n,i,j,a,ans,k,count;scanf("%d",&T);while(T--){scanf("%d",&n);memset(sum,0,sizeof(sum));for(i=0;i<n;i++){scanf("%d",&m);ans=0;memset(num,0,sizeof(num));for(j=1;j<=m;j++){scanf("%d",&a);// 學號無重復update(a);ans+=j-get(a); //樹狀數組求逆序數}// printf("%d\n",ans); // ans為逆序數sum[i]=ans*10;}// 求單調遞增子序列的個數count=0;for(i=0;i<n;i++){if(sum[i]!=-1){k=sum[i];sum[i]=-1;for(j=i+1;j<n;j++){if(sum[j]!=-1&&sum[j]>k){k=sum[j];sum[j]=-1;}}count++;}}printf("%d\n",count);}return 0; }

總結

以上是生活随笔為你收集整理的NYOJ 631 冬季长跑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。