假设我们一开始选取所有的运动项目,然后每一轮将当前选择人数最多的运动项目从我们当前的项目集合中删除,尝试更新答案。容易发现只有这样答案才可能变优,如果不动当前选取人数最多的项目,答案就不可能变优。

我这最外面那个二分是卖萌的。

#include<cstdio>
#include<set>
#include<cstring>
#include<algorithm>
using namespace std;
typedef pair<int,int> Point;
set<Point>S[310];
int n,m,a[310][310],b[310][310],cnts[310],ans=2147483647;
int main(){
// freopen("b.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
scanf("%d",&a[i][j]);
b[i][a[i][j]]=j;
}
}
int l=1,r=n;
while(l<r){
int mid=(l+r>>1);
for(int j=1;j<=n;++j){
S[j].clear();
for(int k=1;k<=m;++k){
S[j].insert(make_pair(b[j][k],k));
}
}
for(int j=1;j<=m;++j){
memset(cnts,0,sizeof(cnts));
for(int k=1;k<=n;++k){
++cnts[(*S[k].begin()).second];
}
int maxx=-1,whi;
for(int k=1;k<=m;++k){
if(cnts[k]>maxx){
maxx=cnts[k];
whi=k;
}
}
if(maxx<=mid){
r=mid;
goto OUT;
}
for(int k=1;k<=n;++k){
S[k].erase(make_pair(b[k][whi],whi));
}
}
l=mid+1;
OUT:;
}
printf("%d\n",l);
// for(int i=1;i<=m;++i){
// for(int j=1;j<=n;++j){
// S[j].clear();
// S[j].insert(make_pair(b[j][i],i));
// }
// for(int j=1;j<=m;++j) if(j!=i){
// memset(cnts,0,sizeof(cnts));
// for(int k=1;k<=n;++k){
// S[k].insert(make_pair(b[k][j],j));
// ++cnts[(*S[k].begin()).second];
// }
// int maxx=-1,whi;
// for(int k=1;k<=m;++k){
// if(cnts[k]>maxx){
// maxx=cnts[k];
// whi=k;
// }
// else if(cnts[k]==maxx && k==i){
// whi=k;
// }
// }
// if(whi!=i){
// for(int k=1;k<=n;++k){
// S[k].erase(make_pair(b[k][j],j));
// }
// }
// else{
// ans=min(ans,maxx);
// }
// }
// }
// printf("%d\n",ans);
return 0;
}

【贪心】AtCoder Grand Contest 018 B - Sports Festival的更多相关文章

  1. 【贪心】【堆】AtCoder Grand Contest 018 C - Coins

    只有两维的时候,我们显然要按照Ai-Bi排序,然后贪心选取. 现在,也将人按照Ai-Bi从小到大排序,一定存在一个整数K,左侧的K个人中,一定有Y个人取银币,K-Y个人取铜币: 右侧的X+Y+Z-K个 ...

  2. AtCoder Grand Contest 018 D - Tree and Hamilton Path

    题目传送门:https://agc018.contest.atcoder.jp/tasks/agc018_d 题目大意: 给定一棵\(N\)个点的带权树,求最长哈密顿路径(不重不漏经过每个点一次,两点 ...

  3. AtCoder Grand Contest 018 A

    A - Getting Difference Time limit時間制限 : 2sec / Memory limitメモリ制限 : 256MB 配点 : 300 点 問題文 箱に N 個のボールが入 ...

  4. AtCoder Grand Contest 018 E Sightseeing Plan

    题意: 给定三个矩形,选定三个点,答案加上第一个点出发经过第二个点在第三个点结束的方案数,只能往右或往下走. 折腾了我半个多下午的题. 设三个矩形为$A,B,C$一个思路是枚举$B$的那个点$s(x, ...

  5. 【GCD】AtCoder Grand Contest 018 A - Getting Difference

    从大到小排序,相邻两项作差,求gcd,如果K是gcd的倍数并且K<=max{a(i)},必然有解,否则无解. 可以自己手画画证明. #include<cstdio> #include ...

  6. AtCoder Grand Contest 018 A - Getting Difference

    A - Getting Difference Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement ...

  7. AtCoder Grand Contest 018题解

    传送门 \(A\) 根据裴蜀定理显然要\(k|\gcd(a_1,...,a_n)\),顺便注意不能造出大于\(\max(a_1,...,a_n)\)的数 int n,g,k,x,mx; int mai ...

  8. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

  9. AtCoder Grand Contest 009

    AtCoder Grand Contest 009 A - Multiple Array 翻译 见洛谷 题解 从后往前考虑. #include<iostream> #include< ...

随机推荐

  1. bzoj 3343 分块

    因为询问比较少,所以我们可以将n个数分成sqrt(n)个块,每个块用一颗bst存一下,然后对于修改l,r,我们将l,r区间中整块的直接在bst上打一个标签,对于不是整块的我们直接暴力修改,对于询问l, ...

  2. ImageView设置边框 以及内部图片居中显示 在AndroidStudio中添加shape.xml文件

    效果如图 边框设置:shape文件 <shape xmlns:android="http://schemas.android.com/apk/res/android"> ...

  3. IBM InfoSphere DataStage and QualityStage

    Info coms from https://www.ibm.com/support/knowledgecenter/en/SSZJPZ_9.1.0/com.ibm.swg.im.iis.ds.nav ...

  4. close()和shutdown()函数

    一·close(int sockfd) 当server和client建立连接,server调用close(),则server发送fin给client,server不在通过该套接字继续传送消息或者接收消 ...

  5. POJ-1410

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12817   Accepted: 3343 Des ...

  6. J2EE MySQL Date数据保持一致解决方案

    1.设置MySQL时区,明确指定 MySQL 数据库的时区,不使用引发误解的 CST show variables like '%time_zone%';set global time_zone = ...

  7. addeventlistener监听scroll跟touch

    这三个事件只在手机上生效 touchstart,手指开始触屏 touchmove,手指移动 touchend,手指触屏结束   这个事件在手机上跟在pc端都生效 scroll事件     addeve ...

  8. Django-form組件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一.创建Form类 1 2 3 4 5 6 7 ...

  9. matlab实用命令

    实用命令 打点测时 在需要测量的开始部分标记: tic 在需要测量的结束部分标记: toc 记录程序从tic到toc运行所花费的时间 Image 翻转 fliplr(x) //左右翻转 flipud( ...

  10. (翻译)一起使用 .NET 和 Docker——DockerCon 2018 更新

    原文:https://blogs.msdn.microsoft.com/dotnet/2018/06/13/using-net-and-docker-together-dockercon-2018-u ...