首页 > 代码库 > HDOJ 4671 Backup Plan 构造优先队列
HDOJ 4671 Backup Plan 构造优先队列
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <algorithm>
- #include <queue>
- using namespace std;
- int n,m;
- int li[111][111];
- bool have[111];
- struct DUI
- {
- int x,s;
- bool operator < (const DUI xx) const
- {
- return s>xx.s;
- }
- };
- int sum[111];
- int main()
- {
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- for(int i=1;i<=n;i++)
- {
- sum[i]=m/n+((i<=m%n)?1:0);
- }
- for(int u=1;u<=n;u++)
- {
- priority_queue<DUI> q;
- for(int i=1;i<=n;i++)
- {
- if(i==u) continue;
- q.push((DUI){i,sum[i]});
- }
- for(int i=0;i<sum[u];i++)
- {
- int pos=u+i*n;
- DUI D=q.top(); q.pop();
- li[pos][1]=D.x;
- D.s++;
- q.push(D);
- }
- }
- for(int i=1;i<=m;i++)
- {
- int c=i;
- while(c>n) c-=n;
- li[i][0]=c;
- }
- for(int i=1;i<=m;i++)
- {
- memset(have,false,sizeof(have));
- have[li[i][0]]=true; have[li[i][1]]=true;
- int p=1;
- for(int j=2;j<n;j++)
- {
- while(have[p]==true) p++;
- li[i][j]=p;
- have[p]=true;
- }
- }
- for(int i=1;i<=m;i++)
- {
- for(int j=0;j<n;j++)
- {
- printf("%d%c",li[i][j],(j==n-1)?‘\n‘:‘ ‘);
- }
- }
- }
- return 0;
- }
HDOJ 4671 Backup Plan 构造优先队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。