您的位置:首页 > 其它

BZOJ1293: [SCOI2009]生日礼物

2018-01-21 20:15 453 查看
这题和noip2016普及组的第三题类似啊= =,直接哈希动态做一下就好了。

代码如下:

#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int n,m,n1,tail,ans,hsh[maxn];
struct dyt{
int x,id;
bool operator <(const dyt &b) const{return x<b.x;}
}a[maxn];
inline int read(){
int x=0; char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x;
}
int main(){
n=read(); m=read();
for (int i=1;i<=m;i++) {
int x=read();
for (int j=1;j<=x;j++) {n1++; a[n1].x=read(); a[n1].id=i;}
}
sort(a+1,a+1+n1);
int all=0; ans=1<<30;
for (int i=1;i<=n1;i++) {
if (i!=1) {hsh[a[i-1].id]--; if (hsh[a[i-1].id]==0) all--;}
while (tail<n1&&all<m) {tail++; hsh[a[tail].id]++; if (hsh[a[tail].id]==1) all++;}
if (all==m) ans=min(ans,a[tail].x-a[i].x);
}
printf("%d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: