标签:规模 closed 礼物 hid efi 帮助 区间 clu 二维数组
有多种方案可选,其中比较短的是1~5和5~8。后者长度为3最短。
【数据规模】
对于50%的数据, N≤10000;
对于80%的数据, N≤800000;
对于100%的数据,1≤N≤1000000,1≤K≤60,0≤彩珠位置<2^31。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #define inf 0x7f7f7f7f; 6 using namespace std; 7 int n,m; 8 int i,j; 9 int l,hh; 10 long long ans,maxn,minn; 11 long long now[61],places[61]; 12 int counts[61],num[61]; 13 int a[61][100001]; 14 int main() 15 { 16 scanf("%d%d",&n,&m); 17 for (i=1;i<=m;i++) { 18 scanf("%d",&num[i]); 19 for (j=1;j<=num[i];j++) { 20 scanf("%d",&a[i][j]); 21 if (j==1) { 22 now[i]=a[i][j];//记录位置 23 places[i]=j;//记录下标 24 } 25 } 26 } 27 ans=inf; 28 while (hh!=n-m+1) { 29 maxn=-inf; minn=inf; l=0;hh++; 30 for (i=1;i<=m;i++) { 31 if (now[i]>maxn) maxn=now[i]; 32 if (now[i]<minn) { 33 minn=now[i]; l=i; 34 } 35 if (now[i]==minn) { 36 if (a[i][places[i]+1]<=a[l][places[l]+1]){ 37 minn=now[i]; 38 l=i; 39 } 40 } 41 } 42 //printf("%d %d\n",maxn,minn); 43 if (places[l]!=num[l]) { 44 now[l]=a[l][places[l]+1]; 45 places[l]++; 46 //pos=places[i]; 47 }//贪心移动区间 48 if (maxn-minn<ans) ans=maxn-minn; //更新答案 49 50 } 51 printf("%lld",ans); 52 } 53
标签:规模 closed 礼物 hid efi 帮助 区间 clu 二维数组
原文地址:http://www.cnblogs.com/Watton/p/7260281.html