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

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

#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 1057 单调栈

    首先我们可以枚举每个一点,然后向下一直拓展到不能拓展为止,然后向下拓展的同时我们可以算出来向左最多拓展的个数,用单调栈来维护一个上升的序列,这样就类似与悬线法找最大01子矩阵了,但是对于这题01交替来 ...

  2. OnLoad & DOMReady

    window.onload 事件会在页面或图像加载完成后立即触发(即所有元素的资源都下载完毕).如果页面上有许多图片.音乐或falsh,onload事件会迟迟无法触发.所以出现了DOM Ready事件 ...

  3. 安装Vue.js devtools

    1.下载安装 https://github.com/vuejs/vue-devtools#vue-devtools 通过以上地址下载安装包,解压以后进入文件,按住shift,点击鼠标右键打开命令窗口 ...

  4. Sberbank Russian Housing Market比赛总结

    第一次真正意义上参加kaggle比赛,都是工作之余看看别人的kernel,然后整理整理自己的分析代码. 总体来说,本次比赛对我而言更像一个入门比赛,更多的是走走kaggle比赛的整个流程,看看高手们都 ...

  5. Python模块学习 - Argparse

    argparse模块 在Python中,argparse模块是标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块.argparse模块能够根据程序中的定义从sys.argv中解析 ...

  6. ioctl( ) 函数

    ioctl( )函数 本函数影响由fd参数引用的一个打开的文件. #include<unistd.h> int ioctl( int fd, int request, .../* void ...

  7. 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程

    使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程 http://blog.csdn.net/liujiayu2/article/details/5 ...

  8. [New Learn] RunLoop学习-官方译文

    Run Loops Run loops是线程的一个基本构成部分.一个run loop 是一个事件处理循环,你可以使用它来处理线程收到的事件.设计run loop的目的就是可以使得线程在收到事件的时候处 ...

  9. iframe子页面获取父页面元素和window对象

    项目中发现要在iframe的弹框中获取父页面中的元素,我们可以按照如下代码操作:$(window.parent.document).find('selector').attr('XXX') 如果我们需 ...

  10. 【mongo】启动mongo

    输入mongo应该就可以启动了.但是我得到了一个报错信息. Failed global initialization: BadValue Invalid or no user locale set. ...