AtCoder Grand Contest 018 B - Sports Festival 二分

4人阅读 评论(0) 收藏 举报
分类:

题意

你正在策划一个装备回收的活动。有n 个玩家和m 种装备,你需要从m
种装备中选出一个非空的子集作为可回收的装备。第i 名玩家第j 喜欢的装备
是Ai;j,每个玩家会从可回收的装备回收他最喜欢的一个装备。老板不希望回
收某一种装备的人数过多,因此你需要从这m 种装备中选出一个可回收的子
集,使得最多人回收的装备的回收人数尽量少。

1<=n,m<=300

分析

这个首先不能看错题
然后最大的尽量小用二分
考虑怎么判断
肯定都从大家最喜欢的开始,如果不行,就往后挪一位,挪到行为止
这里有个思维误区就是从枚举装备开始想怎么判断,不知道该从何枚举起
考虑最喜欢在前面,这样肯定是对的

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
inline int read()
{
  int p=0; int f=1; char ch=getchar();
  while(ch<'0' || ch>'9'){if(ch=='-') f=-1; ch=getchar();}
  while(ch>='0' && ch<='9'){p=p*10+ch-'0'; ch=getchar();}
  return p*f;
}

int n,m,a[N][N];

int p[N]; bool bo[N]; int cnt[N];
bool check(int x)
{
  for(int i=1;i<=n;i++) p[i] = 1;
  for(int i=1;i<=m;i++) bo[i] = 1;

  while(1)
  {
    for(int i=1;i<=m;i++) cnt[i] = 0;
    for(int i=1;i<=n;i++) cnt[a[i][p[i]]] ++;
    int mx = 0; for(int i=1;i<=m;i++) if(cnt[i] > x){mx = i; break;}
    if(mx == 0) return 1;
    bo[mx] = 0; for(int i=1;i<=n;i++) while(!bo[a[i][p[i]]] && p[i]<=m ) p[i] ++;
    bool bk = 1; for(int i=1;i<=m;i++) if(bo[i]) bk = 0;
    if(bk) return 0;
  }
}

int main()
{

  n = read(); m = read(); 
  for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j] = read();
  int L = 1; int R = n; int ret = 0;
  while(L<=R)
  {
    int mid = (L+R)>>1;
    if(check(mid)) R=mid-1,ret=mid;
    else L=mid+1;
  }

  return printf("%d\n",ret),0;
}
查看评论

AtCoder Grand Contest 018 做题记录

退役后的第一次补题 果然做题的时间拉长了好多 但是挺多题自己想出来了 也是蛮爽的UPD:8.11 明早还要上课,能写多少写多少吧。A - Getting Difference有点翻车,A想了好久...
  • di4CoveRy
  • di4CoveRy
  • 2017-08-11 22:09:56
  • 308

AtCoder Grand Contest 018 F - Two Trees

Problem Statement There are two rooted trees, each with N vertices. The vertices of each tree are...
  • wxh010910
  • wxh010910
  • 2017-07-25 13:14:30
  • 365

AtCoder Grand Contest 011 A\B 贪心、二分

A - Airport Bus 時間制限 : 2sec / メモリ制限 : 256MB 配点 : 300 点 問題文 高橋空港には,毎日飛行機で N 人の乗客が到着しま...
  • kyoma
  • kyoma
  • 2017-03-12 21:58:00
  • 284

AtCoder Grand Contest 008

AtCoder Grand Contest 008 题目链接: https://agc008.contest.atcoder.jp/ A.Simple Calculator(模拟) B.Cont...
  • Icefox_zhx
  • Icefox_zhx
  • 2017-11-22 16:59:13
  • 768

AtCoder Grand Contest 010

A 很水的题, 最后全是偶数就行 #include #include #include #include #include using n...
  • sasuke__
  • sasuke__
  • 2017-02-05 23:38:04
  • 436

AtCoder Grand Contest 018 E - Sightseeing Plan

Problem Statement Joisino is planning on touring Takahashi Town. The town is divided into square sec...
  • wxh010910
  • wxh010910
  • 2017-07-25 11:30:03
  • 387

AtCoder Grand Contest 001 E - BBQ Hard

题目分析我们可以发现一个比较显然的结论:题目中要我们求的那个组合数就是(−ai,−bi)(-a_i,-b_i)到(aj,bj)(a_j,b_j)的方案数,知道这个结论之后就可以比较显然的转移了。设f[...
  • ypxrain
  • ypxrain
  • 2017-09-14 09:49:16
  • 171

【AtCoder】(AtCoder Grand Contest 006)D - Median Pyramid Hard

【AtCoder】(AtCoder Grand Contest 006)D - Median Pyramid Hard 传送门:http://agc006.contest.atcoder.jp/tas...
  • Pure_W
  • Pure_W
  • 2017-03-02 07:37:53
  • 331

AtCoder Grand Contest 003 D - Anticube

#include #define N 100100 using namespace std; typedef long long LL; int prime[2200],len; int n,m,an...
  • qq_39387710
  • qq_39387710
  • 2018-01-13 14:56:30
  • 125

Atcoder Grand Contest 19 题解

入坑atcoder,之前打过几场但是都是什么beginner test,,水的一匹。 tourist出的题目,害怕,向老大哥低头。A 比较简单的水题。。贪心判就好了,反正四个东西是可以互相转化的。...
  • qq_35866453
  • qq_35866453
  • 2017-08-27 15:51:22
  • 360
    个人资料
    等级:
    访问量: 0
    积分: 291
    排名: 0
    文章存档
    最新评论